【问题标题】:How does anonymous methods omit parameter list? [closed]匿名方法如何省略参数列表? [关闭]
【发布时间】:2014-05-20 07:51:34
【问题描述】:

我在 Anonymous Methods (C# Programming Guide) 上的 MSDN 文档中阅读了此内容,但我不明白关于省略参数列表的部分。它说:

在一种情况下,匿名方法提供了功能 在 lambda 表达式中找不到。匿名方法使您可以省略 参数列表。这意味着匿名方法可以 转换为具有各种签名的代表。这不是 可以使用 lambda 表达式。

您能否提供一个为匿名方法省略参数列表的示例?

【问题讨论】:

标签: c# lambda anonymous-function anonymous-methods


【解决方案1】:

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

Func<int, int, int> func = delegate(int x, int y)
                           {
                                return x + y;
                           };

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

Func<int, int, int> func2 = (x,y) => x + y;

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

Action act = () => Console.WriteLine("hello world");

因此,lambda 表达式允许您使用 less 代码创建 匿名方法,与匿名方法相比,它们没有任何缺点,因为它们完全是不同的东西。你正在比较 applesoranges

【讨论】:

  • 但是旧的 C# 2 风格的匿名方法可以完全省略所有参数,例如对于两个参数的零“函数”,它可能是 Func&lt;int, int, int&gt; funcZero = delegate { return 0; };。使用 lambda 语法,您必须同时提供两个参数(即使您不使用它们),但可以推断出它们的类型,因此 Func&lt;int, int, int&gt; funcZero = (x, y) =&gt; 0;.
  • @JeppeStigNielsen 这是 OP 的要求。你本来可以提供答案的!
  • 答案不是答案,但评论是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2017-10-28
  • 2011-03-09
  • 2012-03-08
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多