=> operátor (Referenční příručka jazyka C#)
Token je podporován ve dvou podobách: jako operátor lambda a jako oddělovač názvu členu a implementace členu => v definici těla výrazu.
Operátor lambda
Ve výrazech lambdaodděluje operátor lambda 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. Pokud kompilátor může odvodit typy vstupních parametrů, jako 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 textu výrazu
Definice textu výrazu má následující obecnou syntaxi:
member => expression;
kde expression je platný výraz. Návratový typ expression musí být implicitně převoditelný na návratový typ členu. Pokud člen:
- Má
voidnávratový typ nebo - Je:
- Konstruktor
- Finalizační metoda
- Přístupový objekt vlastnosti
setnebo indexeru
expression musí být výraz příkazu. Vzhledem k tomu, že je výsledek výrazu zahozen, návratový typ tohoto výrazu může být libovolný typ.
Následující příklad ukazuje definici těla výrazu pro Person.ToString metodu:
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();
}
Počínaje jazykem C# 6 se podporují definice textu výrazu pro metody, operátory a vlastnosti jen pro čtení. Počínaje jazykem C# 7.0 se podporují definice textu výrazu pro konstruktory, finalizační metody a přístupové objekty vlastností a indexerů.
Další informace najdete v tématu Členové s výrazy.
Přetížení operátoru
Operátor => nelze přetížit.
specifikace jazyka C#
Další informace o operátoru lambda najdete v části Anonymní výrazy funkce specifikace jazyka C#.