Оператор лямбда-выражения (=>
) определяет лямбда-выражение
Токен =>
поддерживается в двух формах: в виде лямбда-оператора и в виде разделителя имени члена и реализации члена в определении тела выражения.
Лямбда-оператор
В лямбда-выражениях лямбда-оператор =>
используется для отделения входных параметров с левой стороны от тела лямбда-выражения с правой стороны.
В следующих примерах используется функция 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#.