Вы можете сделать что-то подобное, но не для самого внешнего объекта, т. Е. Если a
равно нулю, вы не можете получить доступ к a.b
.
Вы можете создать пустой экземпляр A
класс, который возвращает пустые экземпляры для всех своих свойств.Тогда a.b
вернет пустой экземпляр B
, который для свойства c
вернет пустой экземпляр C
, который для свойства e
вернет пустой экземпляр E
.
Вы не получите нулевое значение, но вы получите пустой экземпляр, который вы можете проверить с помощью:
E e = a.b.c.e;
if (e != E.Empty) { ... }
Если какое-либо из свойств по пути возвращает пустой экземпляр, конецрезультат будет 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; } }
}
Пример:
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