Оператор лямбда-выражения (=>) определяет лямбда-выражение

Маркер => поддерживается в двух формах: как лямбда-оператор и в качестве разделителя имени члена и реализации элемента в определении текста выражения.

Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.

Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.

Подсказка

Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.

Лямбда-оператор

В лямбда-выражениях лямбда-оператор=> отделяет входные параметры слева от лямбда-тела справа.

В следующем примере функция LINQ используется с синтаксисом метода для демонстрации использования лямбда-выражений:

string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
  .Where(w => w.StartsWith("a"))
  .Min(w => w.Length);
Console.WriteLine(minimalLength);   // output: 5

int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product);   // output: 280

Входные параметры лямбда-выражения строго типизированы во время компиляции. Когда компилятор вводит типы входных параметров, например в предыдущем примере, можно опустить объявления типов. Если необходимо указать тип входных параметров, необходимо указать тип для каждого параметра, как показано в следующем примере:

int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product);   // output: 280

В следующем примере показано, как определить лямбда-выражение без входных параметров:

Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());

Дополнительные сведения см. в лямбда-выражениях.

Определение текста выражения

Определение текста выражения использует следующий общий синтаксис:

member => expression;

Для элемента, возвращающего значение, результат выражения должен быть неявно преобразован в тип возвращаемого элемента. void Для элемента, конструктора, метода завершения или addremovesetinitметода доступа текст должен быть выражением инструкции. Выражение инструкции может быть назначением, вызовом метода, созданием объекта, операцией добавочного или декремента или await выражением. Его результат, если таковой имеется, удаляется.

В следующем примере показано определение текста выражения для Person.ToString метода:

public override string ToString() => $"{fname} {lname}".Trim();

Это сокращенная версия следующего определения метода:

public override string ToString()
{
   return $"{fname} {lname}".Trim();
}

Определения текста выражения можно использовать для следующих элементов:

  • Методы и локальные функции: Элемент, возвращающий значение, имеет форму T M() => expression;. Элемент void имеет форму void M() => statementExpression;. Дополнительные сведения см. в разделе "Методы " и "Локальные функции".
  • Операторы: Оператор имеет форму public static T operator +(T left, T right) => expression;. Для получения дополнительной информации см. раздел Перегрузка операторов.
  • Свойства и индексаторы: Свойство или индексатор только для чтения имеет форму T P => expression; или T this[int i] => expression;. Также можно использовать тела выражений для отдельных методов доступа. Метод get доступа имеет форму get => expression;. У set или init метода доступа есть форма set => statementExpression; или init => statementExpression;. Дополнительные сведения см. в разделе "Свойства " и "Индексаторы".
  • Конструкторы и методы завершения: Эти члены имеют форму C() => statementExpression; или ~C() => statementExpression;. Дополнительные сведения см. в разделе Конструкторы и методы завершения.
  • Методы доступа к событиям: У add объекта или remove метода доступа есть форма add => statementExpression; или remove => statementExpression;. Для получения дополнительной информации см. в событиях .

Перегрузка оператора

Невозможно перегружать => оператор.

Спецификация языка C#

Дополнительные сведения о лямбда-операторе см. в разделе "Анонимные выражения функций " спецификации языка C#.

См. также