Что такое устройство и как использовать лямбда-выражения? [Дубликат]

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

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

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

24.08.2008 21:53:16
Это хорошие ответы, но об этом уже спрашивали. Другой вопрос - хороший ресурс.
Dale Ragan 24.08.2008 22:03:10
3 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

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

12
27.08.2008 20:41:17

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

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

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

Теперь, когда вы пропускаете через четные числа лямду

x=> x % 2 == 0

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

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

7
24.08.2008 22:14:25

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

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 принимает предикат (делегат, который принимает аргументы и возвращает логическое значение), любой, соответствующий ему, удаляется. Использование лямбда-выражения делает это проще, чем декларирование предиката.

5
24.08.2008 22:07:58