匿名函数仅对 lambdas 有益
Posted
技术标签:
【中文标题】匿名函数仅对 lambdas 有益【英文标题】:Anonym functions only benefit against lambdas 【发布时间】:2019-03-08 15:30:11 【问题描述】:我仍在阅读有关 C# 的文档,我选择了anonymous functions。 确实,他们优先考虑 lambda 表达式,但是,
他们也在后面说:
在一种情况下,匿名方法提供了 lambda 表达式中没有的功能。匿名方法使您能够省略参数列表。这意味着可以将匿名方法转换为具有各种签名的委托。这对于 lambda 表达式是不可能的。
这个(引用)是我想通过一些例子来理解的,如果需要的话。谢谢。
【问题讨论】:
对不起,我的错。我的剪贴板包含其他内容。我没弄明白。我已经更改了链接。 Can I ignore delegate parameters with lambda syntax?的可能重复 【参考方案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 语法。
【讨论】:
最后几句话非常有趣。谢谢你。你给出了很好的解释。 有趣但也是一个实际问题,如果我们已经有了 lambda,他们可能根本不会费心放置通过delegate
创建的匿名函数,因为它们的优势相对较小。了解它们并非同时出现有助于理解它们为何同时存在。以上是关于匿名函数仅对 lambdas 有益的主要内容,如果未能解决你的问题,请参考以下文章