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

6
我在 MSDN 文档中阅读了 匿名方法 (C# 编程指南) 的内容,但是我不理解省略参数列表的部分。它说:
“有一种情况下,匿名方法提供了 lambda 表达式中没有的功能。匿名方法使您可以省略参数列表。这意味着匿名方法可以转换为具有各种签名的委托。这对于 lambda 表达式是不可能的。”
你能举一个省略参数列表的匿名方法的例子吗?

查看许多其他线程,例如 委托关键字 vs. Lambda符号 以及所有与之链接的线程。 - Jeppe Stig Nielsen
1
我已经编辑了问题并投票以重新开放它。我认为现在很清楚了。但是关于答案,你可以在这里看到我的答案 - nawfal
https://dev59.com/qnRB5IYBdhLWcg3wz6QK#505892 - Ken Kin
1个回答

3

我认为你对 lambda表达式匿名方法 有些混淆。你需要明白的是, lambda表达式只是一种语法糖。例如,你可以像这样创建一个带有两个整数参数并返回一个 整数 的匿名方法:

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表达式允许您使用更少的代码创建匿名方法,并且它们没有任何缺点,因为它们与匿名方法完全不同。您正在比较苹果和橙子。请注意,保留HTML标记。

13
然而,旧的C# 2风格的匿名方法可以完全省略所有参数,例如针对两个参数的零“函数”,它可以是Func<int, int, int> funcZero = delegate { return 0; };。使用Lambda语法时,必须提供两个参数(即使您不使用它们),但它们的类型可以被推断出来,因此Func<int, int, int> funcZero = (x, y) => 0; - Jeppe Stig Nielsen
2
@JeppeStigNielsen 这就是 OP 所问的。你本可以提供一个答案! - nawfal
答案不是答案,但评论是。 - Evgeni Nabokov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接