Лямбда-выражения (иногда называемые замыканиями) — это анонимные функции в C#. Их синтаксис часто взаимозаменяем с синтаксисом анонимных методов, но лямбда-выражения обычно более лаконичны.
Делегаты и ссылки на методы
Делегат — это тип, позволяющий ссылаться на функцию. Он может ссылаться на методы-члены класса (экземплярные или статические). Можно создавать ссылки на методы объектов, не ограничиваясь статическими методами.
Пример: можно создать делегат Action<MyClass> (где MyClass — некоторый класс), который ссылается на метод этого класса. Это позволяет вызывать методы объекта через делегат.
Можно создавать цепочки вызовов методов, передавая делегаты между объектами.
Лямбда-выражения: удобство и лаконичность
Лямбда-выражения позволяют генерировать метод прямо в месте его использования, избегая создания отдельных методов. Это особенно удобно, когда метод используется только один раз.
Пример: Action ничего не возвращает и не принимает параметров. Action<T> принимает один параметр типа T. Func<T> возвращает значение типа T.
//Пример использования Action
Action a = () => Console.WriteLine("Hello from lambda!");
a(); // Выведет "Hello from lambda!" в консоль
Здесь анонимный метод помещён в переменную типа делегата и вызван.
Использование лямбда-выражений в обработке событий
Лямбда-выражения удобны при подписке на события. Например, при обработке события клика кнопки:
button.Click += (sender, e) => Console.WriteLine("Кнопка нажата!");
Здесь на событие Click кнопки подписан анонимный метод.
Лямбда-выражения в качестве аргументов методов
Лямбда-выражения удобно использовать в качестве аргументов методов, особенно для передачи небольших фрагментов кода. Например, в алгоритме сортировки можно передать лямбда-выражение в качестве функции сравнения:
//Пример использования лямбда-выражения в качестве функции сравнения
Array.Sort(numbers, (a, b) => a.CompareTo(b));
Здесь лямбда-выражение (a, b) => a.CompareTo(b) сравнивает два числа.
Синтаксис лямбда-выражений
Синтаксис: (параметры) => { тело }
Для однострочных лямбда-выражений фигурные скобки можно опустить. Результатом выполнения строки станет результат всего лямбда-выражения.
//Однострочное лямбда-выражение
(a, b) => a > b;
//Многострочное лямбда-выражение
(a, b) =>
{
//несколько строк кода
return a > b;
};
Лямбда-выражения могут принимать параметры или не принимать вовсе (() => { … }).
Когда использовать лямбда-выражения
Лямбда-выражения идеально подходят для коротких, одноразовых функций, не требующих отдельного объявления. Они делают код более компактным и читаемым.
Лямбда-выражения — мощный и удобный инструмент для работы с делегатами в C#, позволяющий создавать компактный и эффективный код для обработки событий и передачи функций в качестве аргументов. Они упрощают работу с анонимными методами.