C# 级联空引用异常检查?
有没有办法在c#中执行通用级联空引用检查 我试图实现的是,如果我试图访问一个字符串变量,它是C类的一部分,在B类中,在a类中 A.B.C.str 如果我传入了A,我必须检查A是否为null,然后检查B是否为null,然后检查C是否为null,然后访问strC# 级联空引用异常检查?,c#,.net,nullreferenceexception,C#,.net,Nullreferenceexception,有没有办法在c#中执行通用级联空引用检查 我试图实现的是,如果我试图访问一个字符串变量,它是C类的一部分,在B类中,在a类中 A.B.C.str 如果我传入了A,我必须检查A是否为null,然后检查B是否为null,然后检查C是否为null,然后访问str 有没有可能有某种方法,我们可以潜在地传入A和A.B.C.str,如果所有内容都正确存在,则返回null,即任何内容都为null或str的值。在C#中没有内置的可能性,但您可以使用类似的方法 它涉及声明一个函数,因此: public stati
有没有可能有某种方法,我们可以潜在地传入A和A.B.C.str,如果所有内容都正确存在,则返回null,即任何内容都为null或str的值。在C#中没有内置的可能性,但您可以使用类似的方法 它涉及声明一个函数,因此:
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);
}
目前还没有内置的方法来实现这一点,但是在C#6.0中,我们希望有一个“安全导航”操作符,请参见 它看起来像这样:
string postCode = this.With(x => person)
.With(x => x.Address)
.With(x => x.PostCode);
var g1 = parent?.child?.child?.child;
if (g1 != null) // TODO
我闻到了违反德墨忒尔法的味道。我在这里做了一些肮脏的事:@rene:这在很多方面都是错的。我想我喜欢它。最好弄清楚这些空值是从哪里来的——并在源附近阻止它们。@RobertHarvey谢谢你的夸奖:-)FTFY。。。。。。。。。。FTFY。。。。。。。。。。正是我今天所希望的:)太棒了。。那就等不及c#6了!!!一样。出于明显的原因,检查每个级别的旧方法仍将被广泛使用,但它肯定会清理代码的某些部分。然而,在尼克松的帖子中,它并没有明确说明这是否会出现在6.0版本中。@VP。根据
Roslyn
状态页面,它已经准备好并将被包括在内:您可以在.NET 4.0中完成此操作,或者至少可以在VS2015中使用.NET 4.0