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