检查表达式中的 Null

Check for Null in an Expression

我有一个 Expression 看起来像这样:

obj => obj.Child.Name

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

对于当前的 C# 版本 5.0 (或更低版本),您必须显式检查每个 属性,例如:

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

对于 C# 6.0,您将能够使用 Null conditional/propagation operator 检查它。

Console.WriteLine(obj?.Child?.Name);
obj => obj.Child == null ? "" : obj.Child.Name;
obj => obj.Child == null ? null : obj.Child.Name

或使用 C# 6

obj => obj.Child?.Name

您可以之前过滤它们(使用 Where),像这样:

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

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