Что хорошо использует лямбда-выражения, и как я могу научиться их использовать?

Я читал, что Lambda Expressions - невероятно мощное дополнение к С#, но я нахожу себя озадаченным ими. Как они могут улучшить мою жизнь или сделать мой код лучше? Может ли кто-нибудь указать на хороший ресурс для изучения таких выражений?

Они кажутся классными, как ад, но как они соотносятся с моей повседневной жизнью как разработчиком asp.net?

Изменить: Спасибо за примеры и спасибо за ссылку на статьи Эрика Уайта. Я все еще перевариваю их. Один быстрый вопрос: лямбда-выражения полезны ни для чего, кроме запроса? Каждый пример, который я видел, был конструкцией запроса.

Ответ 1

: лямбда-выражения полезны ни для чего, кроме запроса

Выражения Lamba - это не что иное, как удобный способ записи функции "in-line".

Таким образом, они полезны в любом месте, где вам нужен код, который можно назвать как бы отдельной функцией, но которая фактически написана внутри своего вызывающего. (В дополнение к сохранению связанного кода в том же месте в файле, это также позволяет вам играть в забавные игры с переменным охватом - см. "Закрытие" для справки.)

Примером несобственного использования lamba может быть немного кода, который делает что-то асинхронно, что вы начинаете с ThreadPool.QueueUserWorkItem. Важным моментом является то, что вы также можете написать это с помощью анонимных делегатов (которые были введением С# 2) или просто простой отдельной функцией класса.

Этот http://blogs.msdn.com/jomo_fisher/archive/2005/09/13/464884.aspx - превосходное пошаговое введение во все это, что может вам помочь.

Ответ 2

Lambdas обеспечивает функциональную программирование на С#. Это анонимные функции, которые могут передаваться как значения для некоторых других функций. Используется больше всего в LINQ.

Вот надуманный пример:

List<int> myInts = GetAll();
IEnumerable<int> evenNumbers = myInts.Where(x => x % 2 == 0);

Теперь, когда вы заходите через evenNumbers, lamda

x=> x % 2 == 0

затем применяется как фильтр для myInts.

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

Ответ 3

Вот простой пример того, что вы можете сделать с lambdas:

List<int> myList = new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
myList.RemoveAll(x => x > 5);
//myList now == {1,2,3,4,5}

Метод RemoveAll принимает предикат (делегат, который принимает аргументы и возвращает bool), любые, которые соответствуют ему, удаляются. Использование выражения лямбда делает его более простым, чем фактическое объявление предиката.