LINQ扩展方法:使用Lambda表达式还是方法?

时间:2011-07-21 08:03:18

标签: c# linq lambda

使用像Enumerable.Select这样的LINQ扩展方法时,最好使用Lambda表达式还是常规方法?

关于(记忆)优化*和可读性**,我都在问这个问题。

示例代码:

private void Main() {
    var array = new int[1];
    var result1 = array.Select(x => x.ToString());  // Lambda
    var result2 = array.Select(LinqHelper);  // method
}

private string LinqHelper(int x) {
    return x.ToString();
}


* 我主要考虑闭包创建带有未使用的实例化变量的作用域,只是因为这些变量在创建Lambda时在范围内。编辑 - 这是一种愚蠢的想法,因为变量只有在Lambda表达式中被引用时才被闭包捕获 **这两个选项看起来都不错。

1 个答案:

答案 0 :(得分:3)

从优化的角度来看,应该没有区别。

从可读性的角度来看,我想一想你是否需要在几个地方使用相同的逻辑。如果是这样,请使用方法并使用方法组转换。这样你就不会重复自己,所以如果你的要求发生变化,你就不必改变几行代码。

如果您只在一个地方使用逻辑并且它很短,则lambda表达式会捕获逻辑" inline"以一种通常更容易阅读IMO的方式。

我通常会避免使用 long lambda表达式,可能除了使用TPL之外,例如

Parallel.ForEach(..., x => {
   // I'm quite happy to have a long-ish lambda here - it's like a foreach
   // loop body, basically.
});