C# 定义lambda函数并立即执行

C# 定义lambda函数并立即执行,c#,lambda,C#,Lambda,我定义了一个lambda并通过添加“()”立即调用它 尝试: 错误: 错误CS0119:表达式表示匿名方法',其中应为方法组' 为什么会这样?你不是在“定义lambda”。。你在用括号括住你认为是一个的东西 编译器不会推断出这种类型的东西。它需要背景。通过将lambda的表示形式指定或强制转换为委托类型,可以为其提供上下文: Func<int> f = () => 0; int i = f(); Func f=()=>0; int i=f(); 这是明确的背景。如果你想要一

我定义了一个lambda并通过添加“()”立即调用它

尝试:

错误:

错误CS0119:表达式表示
匿名方法',其中应为
方法组'

为什么会这样?

你不是在“定义lambda”。。你在用括号括住你认为是一个的东西

编译器不会推断出这种类型的东西。它需要背景。通过将lambda的表示形式指定或强制转换为委托类型,可以为其提供上下文:

Func<int> f = () => 0;
int i = f();
Func f=()=>0;
int i=f();
这是明确的背景。如果你想要一个不清楚的。。这类事情也起作用:

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

lambda不支持执行。委托支持被执行。lambda表达式可以隐式转换为委托类型。如果未请求此类转换,则不存在“默认”委托类型。从.NET2开始,我们通常对所有内容都使用
Action
Func
,但我们可以使用不同的委托类型

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

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

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

但是它可以工作
inti=((Func)(()=>0))如果没有这些助手方法,请不要离开家
((Func<int>)(() => 0))()