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

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

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

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

В следующих примерах используется функция 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 или
  • Является:
    • Конструктор
    • Метод завершения
    • Метод доступа к свойству или индексатору set

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

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

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

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

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

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

Возможность перегрузки оператора

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

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

См. сведения о лямбда-операторе в разделе Выражения анонимных функций в спецификации языка C#.

См. также