匿名函数仅对 lambda 有利
Anonym functions only benefit against lambdas
我仍在阅读有关 C# 的文档,然后我爱上了 anonymous functions。
确实,他们优先考虑 lambda 表达式,但是,
他们还说:
There is one case in which an anonymous method provides functionality not found in lambda expressions. Anonymous methods enable you to omit the parameter list. This means that an anonymous method can be converted to delegates with a variety of signatures. This is not possible with lambda expressions.
这个(quotation)是我想通过一些例子来理解的,如果需要的话。谢谢。
如果您忽略委托中的参数然后使用匿名函数语法使用 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 语法。
我仍在阅读有关 C# 的文档,然后我爱上了 anonymous functions。 确实,他们优先考虑 lambda 表达式,但是,
他们还说:
There is one case in which an anonymous method provides functionality not found in lambda expressions. Anonymous methods enable you to omit the parameter list. This means that an anonymous method can be converted to delegates with a variety of signatures. This is not possible with lambda expressions.
这个(quotation)是我想通过一些例子来理解的,如果需要的话。谢谢。
如果您忽略委托中的参数然后使用匿名函数语法使用 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 语法。