检查表达式中的空值

本文关键字:空值 表达式 检查表 检查 | 更新日期: 2023-09-27 17:55:34

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

obj => obj.Child.Name

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

检查表达式中的空值

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

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

在 C# 6.0 中,您将能够使用 Null 条件/传播运算符进行检查。

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

或使用 C# 6

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

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

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

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