【发布时间】:2015-05-08 10:58:10
【问题描述】:
我想验证我的假设,即 LINQ 表达式 API 无法让我们创建表示创建局部变量的表达式。
换句话说,你不能创建一个表达式来表示:
int local;
因为这是一个变量声明语句,并且 API 不支持语句 lambda。由 LINQ 表达式 API(而不是委托实例)表示的 lambda 表达式可以使用的唯一状态是它接收的参数以及它通过闭包接收的捕获变量。
我的假设(基于几个月的 LINQ 表达式 API 实践)是否正确?
【问题讨论】:
-
您的意思是.NET 表达式树是否支持“表达式”内的声明?例如,如果您尝试
System.Linq.Expressions.Expression<Action> expr = () => { int local; };(尝试从 C# lambda 构建表达式树),您会收到错误 error CS0834: A lambda expression with a statement body cannot be convert to an expression tree .因此,至少 C# lambda 箭头不支持它。
标签: c# linq linq-expressions custom-linq-providers