检查表达式中的Null

时间:2015-06-11 15:26:24

标签: c# lambda expression-trees

我有Expression看起来像这样:

obj => obj.Child.Name

其中Name是一个字符串。我想要做的是获得Name的值。我可以通过编译方法并调用它来完成它,但如果NullReferenceExceptionChild,则会引发null。有没有办法在这种情况下检查Child是否为空?

4 个答案:

答案 0 :(得分:2)

使用当前的C#版本5.0 (或更低版本),您必须明确检查每个属性,如:

if(obj != null && obj.Child != null)
{
  //get Name property
}

使用C#6.0,您可以使用Null conditional/propagation operator进行检查。

Console.WriteLine(obj?.Child?.Name);

答案 1 :(得分:2)

obj => obj.Child == null ? null : obj.Child.Name

或使用C#6

obj => obj.Child?.Name

答案 2 :(得分:0)

obj => obj.Child == null ? "" : obj.Child.Name;

答案 3 :(得分:0)

您可以先过滤它们(使用 Where ),如下所示:

var results = source.Where(obj => obj.Child != null).Select(obj => obj.Child.Name);

像这样,您将阻止那些空引用错误。