Оператор => (справочник по C#)=> operator (C# reference)

Токен => поддерживается в двух формах: в виде лямбда-оператора и в виде разделителя имени члена и реализации члена в определении тела выражения.The => token is supported in two forms: as the lambda operator and as a separator of a member name and the member implementation in an expression body definition.

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

В лямбда-выражениях лямбда-оператор => используется для отделения входных переменных с левой стороны от тела лямбда-выражения с правой стороны.In lambda expressions, the lambda operator => separates the input variables on the left side from the lambda body on the right side.

В следующих примерах используется функция LINQ с синтаксисом метода для демонстрации применения лямбда-выражений:The following example uses the LINQ feature with method syntax to demonstrate the usage of lambda expressions:

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

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

Входные переменные лямбда-выражений строго типизируются во время компиляции.Input variables of lambda expressions are strongly typed at compile time. Если компилятор может вывести типы входных переменных, как в предыдущем примере, вы можете опустить объявления типа.When the compiler can infer the types of input variables, like in the preceding example, you may omit type declarations. Если требуется указать тип входных переменных, это необходимо делать для каждой переменной, как демонстрируется в следующем примере:If you need to specify the type of input variables, you must do that for each variable, as the following example shows:

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

В следующем примере показано, как определить лямбда-выражение без входных переменных:The following example shows how to define a lambda expression without input variables:

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

Дополнительные сведения см. в разделе Лямбда-выражения.For more information, see Lambda expressions.

Определения тела выраженияExpression body definition

Определение тела выражения имеет следующий общий синтаксис:An expression body definition has the following general syntax:

member => expression;

где expression — любое допустимое выражение.where expression is a valid expression. Тип возвращаемого значения expression должен быть неявно преобразуемым в тип возвращаемого значения элемента.The return type of expression must be implicitly convertible to the member's return type. Если для элемента возвращается значение типа void, либо если элемент является конструктором, методом завершения или методом доступа свойства set, значение expression должно быть выражением оператора. В этом случае оно может быть любого типа.If the member's return type is void or if the member is a constructor, a finalizer, or a property set accessor, expression must be a statement expression; it can be of any type then.

В следующем примере приводится определение тела выражения для метода Person.ToString:The following example shows an expression body definition for a Person.ToString method:

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

Это сокращенная версия следующего определения метода:It's a shorthand version of the following method definition:

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

Определения тела выражения для методов и доступных только для чтения свойств поддерживаются начиная с версии C# 6.Expression body definitions for methods and read-only properties are supported starting with C# 6. Определения тела выражения для конструкторов, методов завершения, методов доступа свойств и индексаторов поддерживаются начиная с версии C# 7.0.Expression body definitions for constructors, finalizers, property accessors, and indexers are supported starting with C# 7.0.

Дополнительные сведения см. в разделе Элементы, воплощающие выражение.For more information, see Expression-bodied members.

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

Оператор => перегрузить нельзя.The => operator cannot be overloaded.

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

Дополнительные сведения см. в разделе Выражения анонимных функций в спецификации языка C#.For more information, see the Anonymous function expressions section of the C# language specification.

См. такжеSee also