C # Лямбда-выражения: зачем их использовать? - PullRequest
295 голосов
/ 03 октября 2008

Я быстро прочитал документацию Microsoft Lambda Expression .

Этот пример помог мне лучше понять:

delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25

Тем не менее, я не понимаю, почему это такая инновация. Это просто метод, который умирает, когда «переменная метода» заканчивается, верно? Почему я должен использовать это вместо реального метода?

Ответы [ 14 ]

4 голосов
/ 03 октября 2008

В большинстве случаев вы используете функциональность только в одном месте, поэтому создание метода просто загромождает класс.

3 голосов
/ 03 октября 2008

Это способ взять небольшую операцию и поместить ее очень близко к месту, где она используется (почти как объявление переменной, близкой к точке ее использования). Это должно сделать ваш код более читабельным. Анонимизируя выражение, вы также значительно усложняете кому-то ломать ваш клиентский код, если эта функция используется где-то еще и модифицируется для ее «улучшения».

Точно так же, зачем вам использовать foreach? Вы можете делать все в foreach с простым циклом for или просто используя IEnumerable напрямую. Ответ: вам не нужно , но это делает ваш код более читабельным.

0 голосов
/ 20 марта 2017

Это, пожалуй, лучшее объяснение того, почему использовать лямбда-выражения -> https://youtu.be/j9nj5dTo54Q

Итак, это улучшение читабельности кода, снижение вероятности возникновения ошибок за счет повторного использования, а не репликации кода, и использование оптимизации за кулисами.

0 голосов
/ 21 августа 2016

Инновация в типе безопасности и прозрачности. Хотя вы не объявляете типы лямбда-выражений, они выводятся и могут использоваться для поиска кода, статического анализа, инструментов рефакторинга и отражения во время выполнения.

Например, прежде чем вы могли использовать SQL и получить атаку SQL-инъекцией, потому что хакер передал строку, где обычно ожидалось число. Теперь вы должны использовать лямбда-выражение LINQ, которое защищено от этого.

Построение LINQ API на чистых делегатах невозможно, поскольку для его оценки требуется объединить деревья выражений вместе.

В 2016 году большинство популярных языков имеют поддержку лямбда-выражений , и C # был одним из пионеров этой эволюции среди основных императивных языков.

...