我对为什么这起作用感到困惑:

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)与普通(命名)方法(或方法组)之间是有区别的。

10-07 12:07