我在代码中遇到了这样的问题,但我真的不知道如何解决。如果有人能帮助我,那就太好了 :)
return Company?.Call?.SingleOrDefault(cf => cf.Name == Client?.CallID)
?? Company?.Call?.SingleOrDefault(cf => cf.IsDefault)
?? new CallData();
首先将其分为3个表达式,用??
分隔:
Company?.Call?.SingleOrDefault(cf => cf.Name == Client?.CallID)
??
Company?.Call?.SingleOrDefault(cf=>cf.IsDefault)
??
new CallData();
整个表达式返回的值将是第一个返回非空值的表达式。
在每个段落内,一旦使用?.
访问的任何属性为null
,则整个表达式将被评估为null
。
?.
运算符被称为 Null-conditional 运算符,是C# 6的新特性,在2014年10月宣布推出。 https://msdn.microsoft.com/en-us/library/dn986595.aspx
Company?.Call?.SingleOrDefault
的第一部分可以看作类似于以下代码:if (Company == null)
{
return null;
}
else if (Company.Call == null)
{
return null;
}
else
{
return Company.Call.SingleOrDefault(....
}
Client
为空且存在名称为null
的Company.Call
,则可能返回无效结果。 - fuboif()
语句并不会对任何人造成伤害。 - CodeCasterSingleOrDefault
方法的名称与IsDefault
属性的名称无关。 - Anders Marzi Tornblad