首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我不能在lambda表达式中使用null传播运算符?

为什么我不能在lambda表达式中使用null传播运算符?
EN

Stack Overflow用户
提问于 2015-03-05 22:21:06
回答 1查看 32.2K关注 0票数 110

我经常在代码中使用null传播运算符,因为它为我提供了更好的代码可读性,特别是在长查询中,我不必对使用的每个类进行null检查。

下面的代码抛出了一个编译错误,我们不能在lambda中使用null传播操作符。

var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);

错误:

Error CS8072表达式树λ不能包含null传播运算符。

如果真的不能做其他事情,C#可以很容易地将上面的代码转换成下面的代码!

var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);

我很好奇为什么C#什么都不做,只是抛出一个编译器错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 22:36:39

这很复杂,因为表达式树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

您可以深入了解相关的discussion on CodePlex,其中提供了3种解决方案:NullPropagationExpressionConditionalExpression和混合解决方案

票数 80
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28880025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档