定义一个lambda函数并立即执行它

本文关键字:执行 函数 lambda 一个 定义 | 更新日期: 2023-09-27 18:08:32

我定义了一个lambda,并通过附加"()"立即调用它。

试题:

int i = (() => 0) ();
错误:

错误CS0119:表达式表示anonymous method', where a方法组'是预期的

为什么?

定义一个lambda函数并立即执行它

您不是"定义lambda"..你把你认为是1的东西括起来了。

编译器不会推断出这种类型的东西。它需要背景。您可以通过将lambda的表示形式分配或强制转换为委托类型来赋予它上下文:

Func<int> f = () => 0;
int i = f();

上下文很清楚。如果你想要一个不清楚的…这类东西也可以用:

int i = ((Func<int>)(() => 0))();

lambda就是不支持被执行。委托支持被执行。lambda表达式可以隐式地转换为委托类型。如果没有请求这种转换,则没有"默认"委托类型。自。net 2以来,我们通常使用ActionFunc,但我们可以使用不同的委托类型。

首先转换为委托,然后执行:

((Func<int>)(() => 0))()

有人可能会争辩说,如果没有其他要求,c#应该默认使用ActionFunc。从c# 5开始,语言就没有这样做了。