Поделиться через


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

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

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

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

В следующем примере функция 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;

Где expression является допустимым выражением. Возвращаемый тип expression должен быть неявно преобразован в тип возвращаемого элемента. Если член:

  • Имеет тип возвращаемого void значения или
  • Является:
    • Конструктор
    • Finalizer
    • Метод доступа к свойству или индексатору set

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

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

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

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

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

Определения текста выражения можно создавать для методов, операторов, свойств, доступных только для чтения, конструкторов, методов завершения и методов доступа к свойствам и индексаторам. Дополнительные сведения см. в разделе "Элементы с выражением".

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

Оператор => не может быть перегружен.

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

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

См. также