【问题标题】:Anonym functions only benefit against lambdas匿名函数仅对 lambdas 有益
【发布时间】:2019-03-08 15:30:11
【问题描述】:

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

他们也在后面说:

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

这个(引用)是我想通过一些例子来理解的,如果需要的话。谢谢。

【问题讨论】:

标签: c# c#-3.0 c#-2.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 语法。

【讨论】:

  • 最后几句话非常有趣。谢谢你。你给出了很好的解释。
  • 有趣但也是一个实际问题,如果我们已经有了 lambda,他们可能根本不会费心放置通过 delegate 创建的匿名函数,因为它们的优势相对较小。了解它们并非同时出现有助于理解它们为何同时存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2011-12-29
  • 1970-01-01
  • 2022-11-05
相关资源
最近更新 更多