Moh*_*kar 94 .net c# compiler-errors c#-6.0 null-propagation-operator
我经常在我的代码中使用null传播运算符,因为它给了我更多可读代码,特别是在长查询中我不必对每个使用的类进行空值检查.
以下代码抛出一个编译错误,我们不能在lambda中使用null传播运算符.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
Run Code Online (Sandbox Code Playgroud)
错误 :
错误CS8072表达式树lambda可能不包含空传播运算符.
C#如果真的不能做任何其他事情,可以轻松地将上面的代码转换为代码到下面的代码!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么C#什么也不做,只是抛出一个编译器错误?
i3a*_*non 63
这很复杂,因为表达式树lambdas(与委托lambdas不同)由现有的LINQ提供程序解释,这些提供程序尚不支持null传播.
转换为条件表达式并不总是准确的,因为有多个评估,而?.例如只有一个评估:
customer.Where(a => c.Increment()?.Name) // Written by the user
customer.Where(a => c.Increment() == null ? null : c.Increment().Name) // Incorrectly interpreted by an old LINQ provider
Run Code Online (Sandbox Code Playgroud)
您可以在相关走得更深CodePlex上的讨论,其中3个解决方案可供选择:NullPropagationExpression,ConditionalExpression和混合