使用lambda表达式代替委托是一个好主意吗?

时间:2011-05-16 12:06:17

标签: c# .net delegates lambda

Lambda表达式可以代替委托,我不确定这是一个好方法,我认为它比代表更方便,但我不是确定这是个好主意。

使用 lambda表达式代替委托是不是一个好主意?

4 个答案:

答案 0 :(得分:10)

从编译器的角度来看,它没有任何区别。

从开发人员的角度来看,lamba表达式在大多数情况下都提高了可读性。

答案 1 :(得分:8)

为自己和其他开发人员编写代码,而不是为您的计算机编写代码。

如果在你的情况下更容易理解lambda,那么这是一个不错的选择。

无论如何,大多数lambda表达式都将被编译为委托。 (不包括表达式树)

答案 2 :(得分:4)

您可以通过多种不同的方式创建委托实例:

  • 使用C#3 lambda表达式:

    Func<int> getFive = () => 5;
    
  • 使用C#2匿名方法语法:

    Func<int> getFive = delegate { return 5 };
    
  • 使用非匿名方法(自C#1以来可用):

    int GetFive()
    {
        return 5;
    }
    …
    Func<int> getFive = GetFive;
    

我认为其中每一项都有其用途。

delegate { }语法的优点是,如果您不需要参数,则无需声明参数。

Lambda表达式非常简洁,可以转换为表达式而不是委托,这对于LINQ-to-some-DB非常有用,并且意味着您可以使用相同的语法来查询内存中的结构和数据库。

使用非匿名方法意味着您可以轻松地重复使用它们,并且也适用于长方法。

上述所有案例均转换为等效代码。唯一的区别是您是否可以看到该方法。

lambda表达式和匿名方法也可以是闭包,即它们可以捕获局部变量。

答案 3 :(得分:1)

yes。您可以按lambda进行委托,减少代码行数并使代码可读