有没有办法在c#中进行通用的级联空引用检查?
我想要实现的是,如果我正在尝试访问一个字符串变量,它是C类的一部分,它在B类中,在A中。
A.B.C.str
我在A中传递,我将不得不检查A是否为空,然后检查B是否为空,然后检查C是否为null然后访问str。
是否有可能有一些方法 - 我们可以传入,A和A.B.C.str,如果一切都正确存在,它返回null是null或str的值。
答案 0 :(得分:6)
目前尚无内置方法,但在C#6.0中我们期待“安全导航”操作符,请参阅this post by Jerry Nixon
看起来像这样:
var g1 = parent?.child?.child?.child;
if (g1 != null) // TODO
答案 1 :(得分:3)
c#中没有内置的可能性,但你可以使用这样的东西http://www.codeproject.com/Articles/109026/Chained-null-checks-and-the-Maybe-monad
它涉及如此声明一个功能:
public static TResult With<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator)
where TResult : class where TInput : class
{
if (o == null) return null;
return evaluator(o);
}
然后您可以这样调用:
string postCode = this.With(x => person)
.With(x => x.Address)
.With(x => x.PostCode);