我对为什么这起作用感到困惑:
Action myAction1 = () => myIntFunc();
...
private Int32 myIntFunc() {
return(4);
}
我希望编译器不允许这样做,因为Action表示不返回参数的函数,而myIntFunc显然返回了参数。
作为进一步的证据,请注意这不起作用:
Action myAction2 = myIntFunc;
就像lambda语法让我摆脱了我本该无法摆脱的东西。我想我正在忽略与Actions和lambda如何协同工作有关的事情... ??
最佳答案
在C# language specification的第6.5段中,其中一个项目符号表示:如果D的返回类型为void,并且F的主体为表达式,则当F的每个参数都被赋予D中对应参数的类型时,D的主体F是有效的表达式(wrt§7),可以将其用作语句表达式(第8.6节)。
因此,在这种情况下可以丢弃返回值。
有关方法组转换,请参见第6.6节。然后该方法必须兼容,包括返回类型。
因此,匿名方法(lambda)与普通(命名)方法(或方法组)之间是有区别的。