这行代码尝试将 lambda 表达式分配给LambaExpression http://msdn.microsoft.com/en-us/library/system.linq.expressions.lambdaexpression.aspx类型化变量,
LambdaExpression expr = n => n;
它失败并显示编译错误消息:
无法转换 lambda
要键入的表达式
'System.Linq.Expressions.LambdaExpression'
因为它不是代表
类型
所以它需要是委托类型。从概念上讲,这对我来说似乎很奇怪,因为我可以构建一个LambdaExpression
像这样使用工厂方法的实例。
工厂拉姆达来自 MSDN http://msdn.microsoft.com/en-us/library/system.linq.expressions.lambdaexpression.aspx
LambdaExpression lambdaExpr = Expression.Lambda(
Expression.Add(
paramExpr,
Expression.Constant(1)
),
new List<ParameterExpression>() { paramExpr }
);
这不是委托类型。
这让我们想知道为什么 lambda 到 Lambda 表达式不能工作?
嗯,这个does work:
Expression<Func<int, int>> exp = n => n;
LambdaExpression lambda = exp;
注意Expression<TDelegate> http://msdn.microsoft.com/en-us/library/bb335710.aspx源自于LambdaExpression
.
我认为你不能只使用的原因LambdaExpression
因为类型是 那么类型n
(在你的例子中)无法推断。
考虑一下您也不能这样做的事实,原因基本相同:
// What is this? An Action? A ThreadStart? What?
Delegate d = () => Console.WriteLine("Hi!");
而你can做这个:
Action a = () => Console.WriteLine("Hi!");
Delegate d = a;
本质上是一样的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)