使用像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表达式中被引用时才被闭包捕获
**这两个选项看起来都不错。
答案 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.
});