定义lambda函数并立即执行

时间:2014-06-14 13:29:23

标签: c# lambda

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

尝试:

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

错误:

  

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

为什么?

2 个答案:

答案 0 :(得分:13)

你不是" 定义一个lambda " ..你围绕你认为的那个包围括号。

编译器没有推断出这种类型的东西。它需要背景。您可以通过将lambda的表示形式分配或转换为委托类型来为其提供上下文:

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

这是明确的背景。如果你想要一个不清楚的......这种事情也有效:

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

答案 1 :(得分:7)

lambda不支持被执行。代表支持被执行。 lambda表达式可以隐式转换为委托类型。如果没有请求这样的转换,则没有“默认”委托类型。从.NET 2开始,我们通常会将ActionFunc用于所有内容,但我们可以使用不同的委托类型。

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

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

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

相关问题