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

StackOverflow https://stackoverflow.com/questions/25376

  •  09-06-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

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

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

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

Это было полезно?

Решение

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

Выражения Ламба — это не что иное, как удобный способ написания функции «в строке».

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

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

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

Другие советы

Lambdas переносит функциональное программирование на C#.Это анонимные функции, которые можно передавать в качестве значений некоторым другим функциям.Чаще всего используется в LINQ.

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

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

Теперь, когда вы выполняете foreach через EvenNumbers, лямбда

x=> x % 2 == 0

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top