Compartilhar via


O operador lambda expression (=>) define uma expressão lambda

O token => é suportado de duas formas: como operador lambda e como separador entre o nome do membro e sua implementação em uma definição de corpo de expressão.

A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.

A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.

Dica

Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.

Operador lambda

Em expressões lambda, o operador => lambda separa os parâmetros de entrada no lado esquerdo do corpo lambda no lado direito.

O exemplo a seguir usa o recurso LINQ com sintaxe de método para demonstrar o uso de expressões lambda:

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

Os parâmetros de entrada de uma expressão lambda são fortemente digitados no tempo de compilação. Quando o compilador infere os tipos de parâmetros de entrada, como no exemplo anterior, você pode omitir declarações de tipo. Se você precisar especificar o tipo de parâmetros de entrada, deverá especificar o tipo para cada parâmetro, como mostra o exemplo a seguir:

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

O exemplo a seguir mostra como definir uma expressão lambda sem parâmetros de entrada:

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

Para obter mais informações, consulte expressões lambda.

Definição de corpo da expressão

Uma definição do corpo da expressão usa a seguinte sintaxe geral:

member => expression;

A expression expressão é válida. O tipo de retorno de expression deve ser implicitamente conversível para o tipo de retorno do membro. Se o membro:

  • Tem um void tipo de retorno ou
  • for um:
    • Construtor
    • Finalizador
    • Acessador set de propriedade ou indexador

expression deve ser uma expressão de instrução. Como o resultado da expressão é descartado, o tipo de retorno dessa expressão pode ser qualquer tipo.

O exemplo a seguir mostra uma definição de corpo de expressão para um Person.ToString método:

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

É uma versão abreviada da seguinte definição de método:

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

É possível criar definições de corpo da expressão para métodos, operadores, propriedades somente leitura, constructos, finalizadores e acessadores e indexadores de propriedade. Para obter mais informações, consulte Membros aptos para expressão.

Sobrecarga do operador

Você não pode sobrecarregar o => operador.

Especificação da linguagem C#

Para obter mais informações sobre o operador lambda, consulte a seção expressões de função anônima da especificação da linguagem C#.

Consulte também