随着lambda表达式(内联代码)等新功能的出现,它是否意味着我们不再需要使用委托或匿名方法了?在我看过的几乎所有样本中,都是使用新语法进行重写.
我们仍然需要使用delegates和lambda表达式的任何地方都不起作用?
是的,有些地方直接使用匿名委托,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',因为它不是委托类型".
lambda是匿名委托的快捷方式,但您将始终使用委托.委托指定方法签名.你可以这样做:
delegate(int i) { Console.WriteLine(i.ToString()) }
可以替换为
f => Console.WriteLine(f.ToString())
Lambda表达式不是(并不意味着)一个替代(隐藏)代表的银弹.当地的小东西很棒,比如:
Listnames = GetNames(); names.ForEach(Console.WriteLine);
它使代码更易读,因此易于理解.
它使代码更短,因此对我们来说工作量减少;)
另一方面,滥用它们非常简单.长或/和复杂的lambda表达式倾向于:
新开发人员很难理解
面向对象较少
更难阅读
所以"这是否意味着我们不再需要使用委托或匿名方法?"否 - 使用Lambda表达式,您可以在其中赢得时间/可读性,否则请考虑使用委托.