Лямбда-Выражениe в C#

Лямбда-выражения-это не именованный метод, записанный вместо экземпляра делегата. Компилятор немедленно преобразовывает лямбда-выражения в одну из следующих двух конструкций.

  • Экземпляр делегата.
  • Дерево выражения.

Лямбда-выражение — своего рода анонимная функция, которая содержит выражения и операторы и может использоваться для создания делегатов. Внутренне компилятор преобразует лямбда-выражение этого типа в анонимный метод, телом которого будет код выражения.

Следующие правила применимы к области действия переменной в лямбда-выражениях.

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

Если лямбда-выражение имеет только один параметр ввода, скобки можно не ставить (что и было в нашем примере), во всех остальных случаях скобки обязательны. Два и более параметра разделяются запятыми и заключаются в скобки.

Например:

Иногда компилятору бывает трудно или даже невозможно определить введенные типы. В этом случае типы можно указать в явном виде, как показано в следующем примере:

Нулевые параметры ввода (т. е. когда параметры вообще отсутствуют) указываются пустыми скобками:

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

Рассмотрим еще два примера которые дают наглядно представление о лямбда-выражении, лямбда-операторе и лямбда-методе.

 

Обновлено: 22.03.2018 — 19:38

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.