我正在定义一个lambda并通过立即附加“()”来调用它。
尝试:
int i = (() => 0) ();
错误:
这是为什么?
最佳答案
Lambda只是不支持被执行。委托(delegate)支持被执行。 Lambda表达式可以隐式转换为委托(delegate)类型。如果不要求这种转换,则不存在“默认”委托(delegate)类型。从.NET 2开始,我们通常对所有内容都使用Action
和Func
,但我们可以使用不同的委托(delegate)类型。
首先转换为委托(delegate),然后执行:
((Func<int>)(() => 0))()
有人可能会争辩说,如果没有其他要求,C#应该默认使用
Action
和Func
。从C#5开始,该语言不执行此操作。