Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O operador Lambda expression (
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;
Para um membro que devolve um valor, o resultado da expressão deve ser implicitamente convertível para o tipo de retorno do membro. Para um void membro, construtor, finalizador, ou set, init, add, ou remove acessório, o corpo deve ser uma expressão de instruções. Uma expressão de instrução pode ser uma atribuição, invocação de método, criação de objetos, operação de incremento ou decremento, ou await expressão. O seu resultado, se existir, é descartado.
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();
}
Pode usar definições de corpos de expressão para os seguintes membros:
-
Métodos e funções locais: Um membro que devolve um valor tem a forma
T M() => expression;. Umvoidmembro tem a formavoid M() => statementExpression;. Para mais informações, consulte Métodos e Funções Locais. -
Operadores: Um operador tem a forma
public static T operator +(T left, T right) => expression;. Para obter mais informações, consulte Sobrecarga do operador. -
Propriedades e indexadores: Uma propriedade de apenas leitura ou indexador tem a forma
T P => expression;ouT this[int i] => expression;. Também pode usar corpos de expressão para acessórios individuais. Umgetacessório tem a formaget => expression;. Asetouinitacessório tem a formaset => statementExpression;ouinit => statementExpression;. Para mais informações, consulte Propriedades e Indexadores. -
Construtores e finalizadores: Estes membros têm a forma
C() => statementExpression;ou~C() => statementExpression;. Para mais informações, consulte Construtores e Finalizadores. -
Visitantes do evento: Um
addacessório ouremovetem a formaadd => statementExpression;ouremove => statementExpression;. Para obter mais informações, consulte Eventos.
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#.