定义一个lambda函数并立即执行它
本文关键字:执行 函数 lambda 一个 定义 | 更新日期: 2023-09-27 18:08:32
我定义了一个lambda,并通过附加"()"立即调用它。
试题:
int i = (() => 0) ();
错误:
错误CS0119:表达式表示
anonymous method', where a
方法组'是预期的
为什么?
您不是"定义lambda"..你把你认为是1的东西括起来了。
编译器不会推断出这种类型的东西。它需要背景。您可以通过将lambda的表示形式分配或强制转换为委托类型来赋予它上下文:
Func<int> f = () => 0;
int i = f();
上下文很清楚。如果你想要一个不清楚的…这类东西也可以用:
int i = ((Func<int>)(() => 0))();
lambda就是不支持被执行。委托支持被执行。lambda表达式可以隐式地转换为委托类型。如果没有请求这种转换,则没有"默认"委托类型。自。net 2以来,我们通常使用Action
和Func
,但我们可以使用不同的委托类型。
首先转换为委托,然后执行:
((Func<int>)(() => 0))()
有人可能会争辩说,如果没有其他要求,c#应该默认使用Action
和Func
。从c# 5开始,语言就没有这样做了。