【发布时间】:2015-01-02 07:34:46
【问题描述】:
其实相关的四个问题:
1) 为什么可以这样做?
Expression<Func<int, int>> incrementorExpression = (i => i + 1);
但不能做到这一点?
LambdaExpression decrementorExpression = (i => i - 1);
在第二种情况下,编译器报告如下:“无法将 lambda 表达式转换为类型 'System.Linq.Expressions.LambdaExpression',因为它不是委托类型”
2) TDelegate 和 Expression<TDelegate> 之间的演员表在哪里声明?我想我记得在过去见过它,但现在似乎找不到它。但我不确定我是否看到它。
3) 当我这样做时:
Expression<Func<int, int>> incrementExpression = (i => ++i);
编译器说,“表达式树可能不包含赋值运算符。”为什么会这样?
4) 如果我能做到的话:
Expression<Func<int, int>> incrementorExpression = (i => i + 1);
那我为什么不能this呢?
public Expression<Func<T>> ToExpression<T>(Func<T> func)
{
return func;
}
【问题讨论】:
-
我不认为 3 属于:
i => (i = i + 1)并不真正代表表达式... -
但
++i仅表示return (i + 1)。这并不意味着i = i + 1。i += 1不是一个表达式,因为它意味着i = i + 1,而是一个语句。 -
这对我来说是个新闻……据我所知,
++i是{ i = i + 1; return i;}…… -
你是对的。谢谢。 :-) 我的错。有了这个,你刚刚回答了我列表中的 (3) 个。
标签: c# .net linq lambda linq-expressions