Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 级联空引用异常检查?_C#_.net_Nullreferenceexception - Fatal编程技术网

C# 级联空引用异常检查?

C# 级联空引用异常检查?,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

有没有办法在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 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