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

尝试:

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

错误:



这是为什么?

最佳答案

Lambda只是不支持被执行。委托(delegate)支持被执行。 Lambda表达式可以隐式转换为委托(delegate)类型。如果不要求这种转换,则不存在“默认”委托(delegate)类型。从.NET 2开始,我们通常对所有内容都使用ActionFunc,但我们可以使用不同的委托(delegate)类型。

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

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

有人可能会争辩说,如果没有其他要求,C#应该默认使用ActionFunc。从C#5开始,该语言不执行此操作。

10-06 05:12
查看更多