关于以防万一,C#匿名方法的语法比lambda表达式的语法简单.书:Professional C#5.0和.NET 4.5.1

Jam*_*mes 3 .net c# lambda anonymous-methods

最近,我读了"Christian Cage的专业C#5.0和.NET 4.5.1; Jay Glynn; Morgan Skinner"一书.我对此感到困惑:"以防万一,匿名方法的语法比lambda表达式的语法更简单".

第8章中的详细信息:Delegates,Lambdas和Events

LAMBDA EXPRESSIONS"注意lambda表达式的语法比匿名方法的语法简单.在要调用的方法有参数但不需要参数的情况下,匿名方法的语法更简单,因为你不能在这种情况下需要提供参数."

任何人都可以解释/示例为什么匿名方法在这种情况下不需要提供参数?

Sel*_*enç 5

因为这是有效的

Func<int,int> f = delegate { return 47; }
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

Func<int,int> f = () =>  47;
Run Code Online (Sandbox Code Playgroud)

使用匿名方法语法,如果不需要,可以省略参数.但是在lambda表达式中,你必须提供参数.

文档中也说明了这一点:

有一种情况是匿名方法提供lambda表达式中找不到的功能.匿名方法使您可以省略参数列表.这意味着可以将匿名方法转换为具有各种签名的委托.

  • 经常使用的惯例是用下划线替换未使用的lambda参数,在这种情况下,你的第二个例子将成为`Func <int,int> f = _ => 47;`,这是有效,直接和可读的(这么长时间)因为每个人都理解并接受下划线约定. (2认同)