我正在定义一个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)
lambda只是不支持被执行.代表支持被执行.lambda表达式可以隐式转换为委托类型.如果没有请求这样的转换,则没有"默认"委托类型.从.NET 2开始,我们通常使用Action和Func一切,但我们可以使用不同的委托类型.
首先转换为委托,然后执行:
((Func<int>)(() => 0))()
Run Code Online (Sandbox Code Playgroud)
有人可能会说C#应该默认使用Action,Func如果没有其他请求.从C#5开始,该语言不会这样做.
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |