Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O operador lambda expression (
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;
Para um membro que retorna um valor, o resultado da expressão deve ser implicitamente conversível para o tipo de retorno do membro. Para um void membro, construtor, finalizador ou set, init, addou remove acessador, o corpo deve ser uma expressão de instrução. Uma expressão de instrução pode ser uma atribuição, invocação de método, criação de objeto, operação de incremento ou decremento ou await expressão. Seu resultado, se houver, é 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();
}
Você pode usar definições do corpo da expressão para os seguintes membros:
-
Métodos e funções locais: Um membro que retorna um valor tem o formulário
T M() => expression;. Umvoidmembro tem o formuláriovoid M() => statementExpression;. Para obter mais informações, consulte Métodos e funções locais. -
Operadores: Um operador tem o formulário
public static T operator +(T left, T right) => expression;. Para obter mais informações, consulte Sobrecarga de operador. -
Propriedades e indexadores: Uma propriedade somente leitura ou indexador tem o formulário
T P => expression;ouT this[int i] => expression;. Você também pode usar corpos de expressão para acessadores individuais. Umgetacessador tem o formulárioget => expression;. Umsetouinitacessador tem o formulárioset => statementExpression;ouinit => statementExpression;. Para obter mais informações, consulte Propriedades e Indexadores. -
Construtores e finalizadores: Esses membros têm o formulário
C() => statementExpression;ou~C() => statementExpression;. Para obter mais informações, consulte Construtores e Finalizadores. -
Acessadores de eventos: Um
addouremoveacessador tem o formulárioadd => statementExpression;ouremove => statementExpression;. Para obter mais informações, consulte Eventos.
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#.