gpt4 book ai didi

c# - lambda 表达式语法与 LambdaExpression 类

转载 作者:可可西里 更新时间:2023-11-01 09:03:23 25 4
gpt4 key购买 nike

这行代码试图将 lambda 表达式分配给 LambaExpression类型变量,

LambdaExpression expr = n => n;

编译失败,提示:

Cannot convert lambda expression to type 'System.Linq.Expressions.LambdaExpression' because it is not a delegate type

所以它需要是委托(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;

本质上是一样的。

关于c# - lambda 表达式语法与 LambdaExpression 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com