Підрозділ 6.2
Лямбди
Розглядає лямбда-вирази як компактний запис анонімних методів: параметри, повернення результату, додавання і видалення дій та передавання лямбд у методи.
6.2. Лямбди
Лямбда-вираз — це компактний синтаксис для визначення анонімних методів. Там, де раніше потрібно було писати ключове слово delegate, список параметрів у дужках і тіло у фігурних дужках, лямбда дозволяє записати все в один рядок. З погляду типів даних лямбда-вираз представляє делегат — тобто посилання на метод із певною сигнатурою. Лямбди особливо корисні, коли метод короткий, застосовується в одному місці і немає сенсу виносити його у самостійну функцію.
Лямбда-оператор => розбиває вираз на дві частини: ліворуч — список параметрів, праворуч — тіло:
(список_параметрів) => тілоЯкщо тіло є одним виразом — фігурні дужки не потрібні. Якщо тіло містить кілька інструкцій — воно оформляється як звичайний блок у фігурних дужках.
Базовий синтаксис
Розглянемо найпростішу лямбду без параметрів, яка виводить повідомлення:
Змінна greet представляє делегат PatientHandler — метод без параметрів і без повернення. Як значення надається лямбда-вираз: ліворуч від => порожні дужки (немає параметрів), праворуч — єдиний вираз.
Якщо лямбда виконує кілька дій — вони поміщаються у фігурні дужки:

Починаючи з C# 10 можна застосовувати неявну типізацію через var. Компілятор сам виводить тип делегата з контексту:
При неявній типізації компілятор зіставляє лямбда-вираз із вбудованим делегатом. У цьому прикладі greet буде типу Action — стандартного делегата без параметрів і без повернення.
Параметри лямбди
При визначенні списку параметрів типи даних зазвичай можна не вказувати — компілятор виводить їх з типу делегата:
Компілятор бачить, що alert є типом AlertHandler, де обидва параметри — string, тому name і msg автоматично отримують тип string.
Якщо ж застосовується неявна типізація через var, компілятор не може вивести типи параметрів — тоді їх потрібно вказати явно:
Якщо лямбда має рівно один параметр і його тип можна вивести — дужки навколо параметра можна опустити:
Повернення результату
Лямбда-вираз може повертати результат. Якщо тіло є єдиним виразом — значення повертається автоматично, без return:
Якщо лямбда містить кілька виразів — потрібен явний return, як у звичайному методі:
Додавання та видалення дій у лямбда-виразі
Оскільки лямбда-вираз представляє делегат, до змінної-лямбди можна додавати інші методи та лямбди через +=, а також видаляти через -=:
При виклику alert() послідовно виконуються всі методи зі списку виклику. Після видалення sendSMS залишаються лише два перших.
Лямбда-вираз як аргумент методу
Найпрактичніше застосування лямбд — передача їх як аргументи методам. Це дозволяє параметризувати поведінку: метод визначає загальну структуру, а конкретна дія передається ззовні:
Метод CountMatching не знає, яка конкретно умова застосовується — він лише викликає делегат condition для кожного елемента. Умова передається зовні через лямбду: x => x > 6.1 або x => x < 3.9. Такий підхід дозволяє повторно використовувати метод для будь-яких критеріїв фільтрації без зміни самого методу.
Лямбда-вираз як результат методу
Метод може повертати лямбда-вираз. Тип, що повертається, — делегат, якому відповідає лямбда:
Метод SelectAnalysis отримує тип аналізу і повертає відповідну лямбду з потрібними порогами норми. Зовнішній код отримує готову функцію-класифікатор і може викликати її для будь-якого значення. Такий патерн часто називають «фабрикою функцій» — метод конструює і повертає поведінку, а не лише дані.
