这行代码试图将lambda表达式分配给 LambaExpression
类型的变量,
LambdaExpression expr = n => n;
它失败,并显示编译错误消息:
因此,它需要是一个委托(delegate)类型。从概念上讲,这对我来说很奇怪,因为我可以使用像这样的工厂方法来构建
LambdaExpression
实例。工厂Lambda from MSDN
LambdaExpression lambdaExpr = Expression.Lambda(
Expression.Add(
paramExpr,
Expression.Constant(1)
),
new List<ParameterExpression>() { paramExpr }
);
那不是委托(delegate)类型。
这使我们想知道为什么lambda到LambaExpression无法工作?
最佳答案
好吧,这确实有效:
Expression<Func<int, int>> exp = n => n;
LambdaExpression lambda = exp;
请注意,
Expression<TDelegate>
源自LambdaExpression
。我认为您不能只使用
LambdaExpression
作为类型的原因是,这样就无法推断n
的类型(在您的示例中)。考虑一个事实,您出于同样的原因也无法做到这一点:
// What is this? An Action? A ThreadStart? What?
Delegate d = () => Console.WriteLine("Hi!");
而您可以这样做:
Action a = () => Console.WriteLine("Hi!");
Delegate d = a;
本质上是同一件事。