检查表达式中的 Null
Check for Null in an Expression
我有一个 Expression
看起来像这样:
obj => obj.Child.Name
其中 Name
是一个字符串。我想做的是获取 Name
的值。我可以通过编译方法并调用它来得到它,但是如果 Child
是 null
,则会抛出 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);
像这样,您将防止那些空引用错误。
我有一个 Expression
看起来像这样:
obj => obj.Child.Name
其中 Name
是一个字符串。我想做的是获取 Name
的值。我可以通过编译方法并调用它来得到它,但是如果 Child
是 null
,则会抛出 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);
像这样,您将防止那些空引用错误。