级联空引用异常检查?

时间:2014-06-25 20:25:10

标签: c# .net nullreferenceexception

有没有办法在c#中进行通用的级联空引用检查?

我想要实现的是,如果我正在尝试访问一个字符串变量,它是C类的一部分,它在B类中,在A中。

  

A.B.C.str

我在A中传递,我将不得不检查A是否为空,然后检查B是否为空,然后检查C是否为null然后访问str。

是否有可能有一些方法 - 我们可以传入,A和A.B.C.str,如果一切都正确存在,它返回null是null或str的值。

2 个答案:

答案 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);