级联空引用异常检查

本文关键字:检查 异常 引用 级联 | 更新日期: 2023-09-27 18:10:14

是否有一种方法可以在c#中进行通用级联空引用检查?

我想要实现的是,如果我试图访问一个字符串变量,它是类C的一部分,它在类B中返回,在a中

A.B.C.str

当我传入A时,我必须检查A是否为空,然后检查B是否为空,然后检查C是否为空,然后访问str

是否有可能有一些方法,我们可以传入A和a.b.c.s str,如果一切都正确存在,它返回null是任何为null或str的值

级联空引用异常检查

目前还没有内置的方法来做到这一点,但是在c# 6.0中,我们期待一个'安全导航'操作符,参见Jerry Nixon的这篇文章

它看起来像这样:

var g1 = parent?.child?.child?.child; 
if (g1 != null) // TODO

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