这行代码尝试将lambda表达式赋给LambaExpression类型化变量,
LambdaExpression expr = n => n;
Run Code Online (Sandbox Code Playgroud)
它失败并出现编译错误消息:
无法将lambda表达式转换为类型'System.Linq.Expressions.LambdaExpression',因为它不是委托类型
所以它需要是一个委托类型.从概念上讲,这对我来说似乎很奇怪,因为我可以LambdaExpression使用像这样的工厂方法构建一个实例.
来自MSDN的 Factory Lambda
LambdaExpression lambdaExpr = Expression.Lambda(
    Expression.Add(
        paramExpr,
        Expression.Constant(1)
    ),
    new List<ParameterExpression>() { paramExpr }
);
Run Code Online (Sandbox Code Playgroud)
那不是委托类型.
这让我们想知道为什么lambda到LambaExpression无法工作?
Dan*_*Tao 10
嗯,这确实有效:
Expression<Func<int, int>> exp = n => n;
LambdaExpression lambda = exp;
Run Code Online (Sandbox Code Playgroud)
请注意,Expression<TDelegate>派生自LambdaExpression.
我认为你不能仅仅使用LambdaExpression类型的原因是,n无法推断(在你的例子中)的类型.
考虑到你也不能这样做的事实,原因基本相同:
// What is this? An Action? A ThreadStart? What?
Delegate d = () => Console.WriteLine("Hi!");
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
Action a = () => Console.WriteLine("Hi!");
Delegate d = a;
Run Code Online (Sandbox Code Playgroud)
这基本上是一回事.