当前位置:  开发笔记 > 编程语言 > 正文

是否存在委托语法优先于匿名方法的lambda表达式的情况?

如何解决《是否存在委托语法优先于匿名方法的lambda表达式的情况?》经验,为你挑选了3个好方法。

随着lambda表达式(内联代码)等新功能的出现,它是否意味着我们不再需要使用委托或匿名方法了?在我看过的几乎所有样本中,都是使用新语法进行重写.

我们仍然需要使用delegates和lambda表达式的任何地方都不起作用?



1> James Newton..:

是的,有些地方直接使用匿名委托,lambda表达式不起作用.

如果方法采用无类型的委托,则编译器不知道将匿名委托/ lambda表达式解析为什么,并且您将收到编译器错误.

public static void Invoke(Delegate d)
{
  d.DynamicInvoke();
}

static void Main(string[] args)
{
  // fails
  Invoke(() => Console.WriteLine("Test"));

  // works
  Invoke(new Action(() => Console.WriteLine("Test")));

  Console.ReadKey();
}

失败的代码行将得到编译器错误"无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型".



2> Darren Kopp..:

lambda是匿名委托的快捷方式,但您将始终使用委托.委托指定方法签名.你可以这样做:

 delegate(int i) { Console.WriteLine(i.ToString()) }

可以替换为

f => Console.WriteLine(f.ToString())



3> Dandikas..:

Lambda表达式不是(并不意味着)一个替代(隐藏)代表的银弹.当地的小东西很棒,比如:

List names = GetNames();
names.ForEach(Console.WriteLine);

    它使代码更易读,因此易于理解.

    它使代码更短,因此对我们来说工作量减少;)

另一方面,滥用它们非常简单.长或/和复杂的lambda表达式倾向于:

    新开发人员很难理解

    面向对象较少

    更难阅读

所以"这是否意味着我们不再需要使用委托或匿名方法?"否 - 使用Lambda表达式,您可以在其中赢得时间/可读性,否则请考虑使用委托.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有