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.
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 pode inferir 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á fazer isso 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 tem a seguinte sintaxe geral:
member => expression;
Onde expression
está 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 tipo de retorno
void
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
O =>
operador não pode ser sobrecarregado.
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#.