Лямбда-выражения-это не именованный метод, записанный вместо экземпляра делегата. Компилятор немедленно преобразовывает лямбда-выражения в одну из следующих двух конструкций.
- Экземпляр делегата.
- Дерево выражения.
Лямбда-выражение — своего рода анонимная функция, которая содержит выражения и операторы и может использоваться для создания делегатов. Внутренне компилятор преобразует лямбда-выражение этого типа в анонимный метод, телом которого будет код выражения.
Следующие правила применимы к области действия переменной в лямбда-выражениях.
- Захваченная переменная не будет уничтожена сборщиком мусора до тех пор, пока делегат, который на нее ссылается, не выйдет за границы области.
- Переменная, введенная в лямбда-выражение, невидима во внешнем методе.
- Лямбда-выражение не может непосредственно захватывать параметры ref или out из включающего их метода.
- Лямбда-выражение не может содержать оператор goto, оператор break или оператор continue, для которых, метка перехода находится вне тела либо в теле содержащейся
анонимной функции. - Во всех лямбда-выражениях используется лямбда-оператор =>, который читается как «переходит в». Левая часть лямбда-оператора определяет параметры ввода (если таковые
имеются), а правая часть содержит выражение или блок оператора. Лямбда-выражение x => x * x читается как «x переходит в x, x раз».
Если лямбда-выражение имеет только один параметр ввода, скобки можно не ставить (что и было в нашем примере), во всех остальных случаях скобки обязательны. Два и более параметра разделяются запятыми и заключаются в скобки.
Например:
Иногда компилятору бывает трудно или даже невозможно определить введенные типы. В этом случае типы можно указать в явном виде, как показано в следующем примере:
Нулевые параметры ввода (т. е. когда параметры вообще отсутствуют) указываются пустыми скобками:
Следующий пример демонстрирует как с помощью делегата и лямбда-выражения можно написать калькулятор:
Рассмотрим еще два примера которые дают наглядно представление о лямбда-выражении, лямбда-операторе и лямбда-методе.