Vous pouvez faire quelque chose comme ça, mais pas pour l'objet le plus à l'extérieur, c'est-à-dire si a
est nul, vous ne pouvez pas accéder à a.b
.
Vous pouvez créer une instance vide de la classe A
, qui renvoie des instances vides pour toutes ses propriétés. Puis a.b
retournera une instance vide de B
, qui pour la propriété c
retournera une instance vide de C
, qui pour la propriété e
retournera une instance vide de E
.
Vous n'obtenir une valeur nulle, mais vous obtiendrez une instance vide, que vous pouvez vérifier avec:
E e = a.b.c.e;
if (e != E.Empty) { ... }
Si l'une des propriétés le long du chemin retourne une instance vide, le résultat final être E.Empty
.
public class A {
public B b;
public A(B newB) { b = newB; }
private static A _empty = new A(B.Empty);
public static A Empty { get { return _empty; }}
}
public class B {
public C c;
public B(C newC) { c = newC; }
private static B _empty = new B(C.Empty);
public static B Empty { get { return _empty; } }
}
public class C {
public E e;
public C(E newE) { e = newE; }
private static C _empty = new C(E.Empty);
public static C Empty { get { return _empty; } }
}
public class E {
public string name;
public E(string newName) { name = newName; }
private static E _empty = new E(null);
public static E Empty { get { return _empty; } }
}
Exemple:
A a1 = new A(new B(new C(new E("Hello world!"))));
A a2 = new A(new B(new C(E.Empty)));
A a3 = new A(B.Empty);
E e1 = a1.b.c.e; // e1.name returns "Hello world!"
E e2 = a2.b.c.e; // e2 == E.Empty
E e3 = a3.b.c.e; // e3 == E.Empty
ressemble "a.b.c.e" mais agit comme un "null == null: a.b == null null: a.b.c == null null: a.b.c.d"? – xcud
@xcud: oui exactement mais je ne veux pas écrire tout cela ==? nulls: ... –