匿名方法如何省略参数列表?

Dam*_*ian 6 c# lambda anonymous-methods anonymous-function

我在关于匿名方法(C#编程指南)的MSDN文档中阅读本文,但我不理解省略参数列表的部分.它说:

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

你能举一个省略匿名方法参数列表的例子吗?

Sel*_*enç 3

我认为您对lambda 表达式匿名方法感到困惑。您需要了解的是,lambda 表达式只是语法糖。例如,您可以创建一个匿名方法,该方法接受 2 个整数参数并返回integer如下所示的值:

Func<int, int, int> func = delegate(int x, int y)
                           {
                                return x + y;
                           };
Run Code Online (Sandbox Code Playgroud)

使用 lambda 语法,您可以将该语句缩短为:

Func<int, int, int> func2 = (x,y) => x + y;
Run Code Online (Sandbox Code Playgroud)

此外,您实际上并不需要将任何参数传递给 lambda 语句。例如,这是完全有效的:

Action act = () => Console.WriteLine("hello world");
Run Code Online (Sandbox Code Playgroud)

因此,lambda 表达式允许您用更少的代码创建匿名方法,并且与匿名方法相比,它们没有任何缺点,因为它们是完全不同的东西。您正在将苹果橙子进行比较。

  • 但是旧的 C# 2 风格的匿名方法可以完全省略所有参数,就像两个参数的零“函数”一样,它可以是 `Func&lt;int, int, int&gt; funcZero = delegate { return 0; } };`。使用 lambda 语法,您必须给出两个参数(即使您不使用它们),但可以推断它们的类型,因此 `Func&lt;int, int, int&gt; funcZero = (x, y) =&gt; 0;` 。 (13认同)
  • @JeppeStigNielsen,这就是OP所要求的。您本来可以提供答案! (2认同)