Методы расширения LINQ: использовать лямбда-выражения или методы? - PullRequest
2 голосов
/ 21 июля 2011

При использовании методов расширения LINQ, таких как Enumerable.Select, лучше использовать лямбда-выражение или обычный метод?

Я спрашиваю это как в отношении оптимизации (памяти) *, так и читабельности **.

Пример кода:

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();
}

* Я в основном думаю о замыканиях, создающих области с неиспользованными экземплярами переменных в них, просто потому, что эти переменные находились в области действия при создании лямбды .Редактировать - это было глупое мышление, поскольку переменные захватываются замыканием только тогда, когда на них ссылаются в лямбда-выражении.
** Обе опции выглядят хорошо для меня.

1 Ответ

3 голосов
/ 21 июля 2011

С точки зрения оптимизации не должно быть никакой разницы.

С точки зрения читабельности, я бы подумал о том, нужна ли вам одна и та же логика в нескольких местах.Если это так, используйте метод и используйте преобразование группы методов.Таким образом, вы не повторяете себя, поэтому вам не нужно менять несколько битов кода, если ваши требования меняются.

Если вы используете логику только в одном месте и она короткая, лямбдавыражение захватывает логику «inline» таким образом, который обычно легче читать IMO.

Я обычно избегаю long лямбда-выражений, с возможным исключением использования с TPL, например

Parallel.ForEach(..., x => {
   // I'm quite happy to have a long-ish lambda here - it's like a foreach
   // loop body, basically.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...