定义lambda函数并立即执行它

Spa*_*key 8 c# lambda

我正在定义一个lambda并通过追加"()"立即调用它.

尝试:

int i = (() => 0) ();
Run Code Online (Sandbox Code Playgroud)

错误:

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

这是为什么?

Sim*_*ead 13

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

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

Func<int> f = () => 0;
int i = f();
Run Code Online (Sandbox Code Playgroud)

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

int i = ((Func<int>)(() => 0))();
Run Code Online (Sandbox Code Playgroud)


usr*_*usr 7

lambda只是不支持被执行.代表支持被执行.lambda表达式可以隐式转换为委托类型.如果没有请求这样的转换,则没有"默认"委托类型.从.NET 2开始,我们通常使用ActionFunc一切,但我们可以使用不同的委托类型.

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

((Func<int>)(() => 0))()
Run Code Online (Sandbox Code Playgroud)

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