我有Expression
看起来像这样:
obj => obj.Child.Name
其中Name
是一个字符串。我想要做的是获得Name
的值。我可以通过编译方法并调用它来完成它,但如果NullReferenceException
为Child
,则会引发null
。有没有办法在这种情况下检查Child
是否为空?
答案 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);
像这样,您将阻止那些空引用错误。