匿名功能仅对lambda有利

时间:2019-03-08 15:30:12

标签: c# c#-3.0 c#-2.0

我仍在阅读有关 C#的文档,而我跌倒了anonymous functions。 的确,他们优先考虑lambda表达式,但

他们也在之后说:

  

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

我想通过一些示例了解这个(引号)。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您忽略委托中的参数,则可以使用delegate使用匿名函数语法,将其省略:

Action<int> a = delegate { Console.WriteLine("I am ignoring the int parameter."); }; //takes 1 argument, but not specified on the RHS
a(2); // Prints "I am ignoring the int parameter."

没有办法使用lambda表达式:

Action<int> a = => { Console.WriteLine("I am ignoring the int parameter."); }; // syntax error

Action<int> a = () => { Console.WriteLine("I am ignoring the int parameter."); }; // CS1593 Delegate 'Action<int>' does not take 0 arguments

它并不是非常有用,但是当您知道要在某个事件上完成某件事并且甚至不关心它的签名是什么时,它可能会很方便。

button.OnClick += delegate { Console.WriteLine("Button clicked and that's all I care about"); };

从历史上看,匿名函数在C#2.0中的最大优势是它们存在。直到C#3.0才引入Lambda语法。