Керівництво c #, лямбда-вирази
Починаючи з C # 3.0, доступний новий синтаксис для призначення реалізації коду делегатам, званий лямбда-виразами (lambda expression). Лямбда-вирази можуть використовуватися скрізь, де є параметр типу делегата.
Синтаксис лямбда-виразів простіше синтаксису анонімних методів. У разі якщо підлягає викликом метод має параметри, а ці параметри не потрібні, синтаксис анонімних методів простіше, оскільки в цьому випадку вказувати параметри не буде потрібно.
У всіх лямбда-виразах застосовується новий лямбда-оператор =>, який розділяє лямбда-вираз на дві частини. У лівій його частині вказується вхідний параметр (або кілька параметрів), а в правій частині - тіло лямбда-вирази. Оператор => іноді описується такими словами, як "переходить" або "стає".
У C # підтримуються два різновиди лямбда-виразів в залежності від тіла самого лямбда-вирази. Так, якщо тіло лямбда-вирази складається з одного виразу, то утворюється одиночне лямбда-вираз. В цьому випадку тіло виразу не полягає в фігурні дужки. Якщо ж тіло лямбда-вирази складається з блоку операторів, укладених у фігурні дужки, то утворюється блочне лямбда-вираз. При цьому блочне лямбда-вираз може містити цілий ряд операторів, в тому числі цикли, виклики методів і умовні оператори if. Обидва різновиди лямбда-виразів розглядаються далі окремо.
Поодинокі лямбда-вирази
В одиночному лямбда-виразі частина, яка перебуває праворуч від оператора =>, впливає на параметр (або ряд параметрів), що вказується зліва. Повертаним результатом обчислення такого виразу є результат виконання лямбда-оператора. Нижче наведена загальна форма одиночного лямбда-вирази, що приймає єдиний параметр:
Якщо ж потрібно вказати кілька параметрів, то використовується наступна форма:
Таким чином, коли потрібно вказати два параметра або більше, їх слід укласти в дужки. Якщо ж вираз не вимагає параметрів, то слід використовувати порожні дужки.
Лямбда-вираз застосовується в два етапи. Спочатку оголошується тип делегата, сумісний з лямбда-виразом, а потім екземпляр делегата, якому присвоюється лямбда-вираз. Після цього лямбда-вираз обчислюється при зверненні до примірника делегата. Результатом його обчислення стає повертається значення. Давайте розглянемо приклад:
Блокові лямбда-вирази
Другий різновидом лямбда-виразів є блочне лямбда-вираз. Для такого лямбда-вирази характерні розширені можливості виконання різних операцій, оскільки в його тілі допускається вказувати кілька операторів. Наприклад, в блоковому лямбда-виразі можна використовувати цикли і умовні оператори if, оголошувати змінні і т.д. Створити блочне лямбда-вираз неважко. Для цього досить зробити висновок тіло вираження в фігурні дужки. Крім можливості використовувати кілька операторів, в іншому блочне лямбда-вираз, практично нічим не відрізняється від щойно розглянутого одиночного лямбда-вирази.
Давайте модифікуємо попередній приклад, додавши капчу в форму реєстрації:
