Operátor výrazu lambda definuje=>
výraz lambda.
Token =>
je podporován ve dvou formách: jako operátor lambda a jako oddělovač názvu člena a implementace člena v definici těla výrazu.
Operátor Lambda
Ve výrazech lambda operátor =>
lambda odděluje vstupní parametry na levé straně od těla lambda na pravé straně.
Následující příklad používá funkci LINQ se syntaxí metody k předvedení použití výrazů 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
Vstupní parametry výrazu lambda jsou v době kompilace silného typu. Když kompilátor může odvodit typy vstupních parametrů, jako je v předchozím příkladu, můžete vynechat deklarace typu. Pokud potřebujete zadat typ vstupních parametrů, musíte to udělat pro každý parametr, jak ukazuje následující příklad:
int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product); // output: 280
Následující příklad ukazuje, jak definovat výraz lambda bez vstupních parametrů:
Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());
Další informace najdete v tématu Výrazy lambda.
Definice těla výrazu
Definice těla výrazu má následující obecnou syntaxi:
member => expression;
kde expression
je platný výraz. Návratový expression
typ musí být implicitně konvertibilní na návratový typ člena. Pokud člen:
- Má návratový
void
typ nebo - Je:
- Konstruktor
- Finalizátor
- Přístupové objekty vlastnosti nebo indexeru
set
expression
musí být výraz příkazu. Vzhledem k tomu, že je výsledek výrazu zahozen, může být návratový typ tohoto výrazu libovolným typem.
Následující příklad ukazuje definici těla výrazu pro metodu Person.ToString
:
public override string ToString() => $"{fname} {lname}".Trim();
Jedná se o zkrácenou verzi následující definice metody:
public override string ToString()
{
return $"{fname} {lname}".Trim();
}
Můžete vytvořit definice těla výrazu pro metody, operátory, vlastnosti jen pro čtení, konstruktory, finalizátory a vlastnosti a přístupové objekty indexeru. Další informace naleznete v tématu Výrazy body body.
Přetížení operátoru
Operátor =>
nelze přetížit.
specifikace jazyka C#
Další informace o operátoru lambda naleznete v části Výrazy anonymní funkce specifikace jazyka C#.