Operador => (referência do C#)=> operator (C# reference)

Há suporte para o token => de duas formas: como o operador lambda e como um separador de um nome de membro e a implementação de membro em uma definição de corpo da expressão.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.

Operador lambdaLambda operator

Em expressões lambda, o operador lambda => separa as variáveis de entrada no lado esquerdo do corpo lambda no lado direito.In lambda expressions, the lambda operator => separates the input variables on the left side from the lambda body on the right side.

O seguinte exemplo usa o recurso LINQ com a sintaxe de método para demonstrar o uso de expressões lambda: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

As variáveis de entrada de expressões lambda são fortemente tipadas no tempo de compilação.Input variables of lambda expressions are strongly typed at compile time. Quando o compilador pode inferir os tipos de variáveis de entrada, como no exemplo anterior, você pode omitir as declarações de tipo.When the compiler can infer the types of input variables, like in the preceding example, you may omit type declarations. Caso precise especificar o tipo de variáveis de entrada, faça isso para cada variável, como mostra o seguinte exemplo: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

O seguinte exemplo mostra como definir uma expressão lambda sem variáveis de entrada:The following example shows how to define a lambda expression without input variables:

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

Para obter mais informações, confira Expressões lambda.For more information, see Lambda expressions.

Definição de corpo da expressãoExpression body definition

Uma definição de corpo da expressão tem a seguinte sintaxe geral:An expression body definition has the following general syntax:

member => expression;

em que expression é uma expressão válida.where expression is a valid expression. Observe que expression pode ser uma expressão de instrução apenas se o tipo de retorno do membro é void ou se o membro é um construtor, um finalizador ou um acessador set de propriedade.Note that expression can be a statement expression only if the member's return type is void, or if the member is a constructor, a finalizer, or a property set accessor.

O seguinte exemplo mostra uma definição de corpo da expressão para um método Person.ToString:The following example shows an expression body definition for a Person.ToString method:

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

É uma versão abreviada da seguinte definição de método:It's a shorthand version of the following method definition:

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

Há suporte para definições de corpo da expressão em métodos e propriedades somente leitura do C# 6 em diante.Expression body definitions for methods and read-only properties are supported starting with C# 6. Há suporte para definições de corpo da expressão em construtores, finalizadores, acessadores de propriedade e indexadores do C# 7.0 em diante.Expression body definitions for constructors, finalizers, property accessors, and indexers are supported starting with C# 7.0.

Para obter mais informações, consulte Membros aptos para expressão.For more information, see Expression-bodied members.

Capacidade de sobrecarga do operadorOperator overloadability

O operador => não pode ser sobrecarregado.The => operator cannot be overloaded.

Especificação da linguagem C#C# language specification

Para obter mais informações, confira a seção Expressões de função anônima da Especificação da linguagem C#.For more information, see the Anonymous function expressions section of the C# language specification.

Consulte tambémSee also