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