Partilhar via


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

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

A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.

A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.

Sugestão

Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões 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 tipados em tempo de compilação. Quando o compilador infere os tipos de parâmetros de entrada, como no exemplo anterior, pode omitir declarações de tipos. Se precisar de especificar o tipo de parâmetros de entrada, deve especificar o tipo para cada parâmetro, como mostra o exemplo seguinte:

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 do Lambda.

Definição do corpo da expressão

Uma definição de corpo de expressão utiliza a seguinte sintaxe geral:

member => expression;

É expression uma 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 devolução, ou
  • É um:
    • Construtor
    • Finalizador
    • Acessador de propriedade ou indexador set

expression deve ser uma expressão de declaraçã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();
}

Você pode criar definições de corpo de expressão para métodos, operadores, propriedades somente leitura, construtores, finalizadores e acessadores de propriedade e indexador. Para obter mais informações, consulte Membros com corpo de expressão.

Capacidade de sobrecarga do operador

Não podes 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ônimas da especificação da linguagem C#.

Ver também