2011-05-16 49 views
1

Lambda表达式可以用来代替代表,我不确定它是否是一种好方法,我认为它比代表更方便,但我不确定它是否是个好主意。使用lambda表达式而不是代表是否是个好主意?

使用lambda表达式而不是代表是否是个好主意?

+5

为什么?为什么你认为lambda不是一种“好方法”或不是“一个好主意”? – 2011-05-16 12:08:57

+7

你有一个**有趣**使用**格式**,就像我不知何故缺乏**阅读理解**。 – 2011-05-16 12:09:09

+0

这取决于案件。难道你没有一个例子,说明两种方法都有意义,你不确定哪种方法更好? – 2011-05-16 12:20:14

回答

9

从编译器的角度来看,没有什么区别。

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

1

yes。您可以通过lambda做代表和减少代码的行数,使代码可读性

+6

[Lambada](http://www.youtube.com/watch?v=i8mz9uOvFQA)?有一段时间没有听说过。 – alex 2011-05-16 12:11:06

+0

我知道我可以做到这一点,我目前正在这样做,我问这是一个好主意吗?我认为这可能会降低性能或导致另一个问题。 – 2011-05-16 12:11:45

+0

@Nasser Hadjloo没有表现问题。对于编译器都是一样的 – anishMarokey 2011-05-16 12:17:11

7

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

如果拉姆达更容易在你的情况了解,这是一个不错的选择。

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

+2

+1“写代码(...)不适用于您的计算机” – 2011-05-16 12:21:05

4

您可以用多种不同的方式创建一个委托实例:

  • 使用C#3 lambda表达式:

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

    Func<int> getFive = delegate { return 5 }; 
    
  • 使用非匿名方法(availab乐从C#1):

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

我认为每一种都有它的用途。

delegate { }的语法,你不必声明参数,如果你不需要他们的优势。

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

使用非匿名方式意味着你可以轻松地重用他们,也适合长期方法。

上述所有情况均转换为等效代码。唯一的区别是该方法对您是否可见。

两个lambda表达式和匿名方法也可以是封闭的,即它们可以捕捉局部变量。

相关问题