Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Operátor výrazu lambda definuje
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.
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
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 odvodí 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 zadat typ 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 používá následující obecnou syntaxi:
member => expression;
U člena, který vrací hodnotu, musí být výsledek výrazu implicitně konvertibilní na návratový typ člena. V případě členu void , konstruktoru, finalizátoru nebo set, init, add, nebo remove příslušenství musí být tělo výrazem příkazu. Výrazem příkazu může být přiřazení, vyvolání metody, vytvoření objektu, inkrementace nebo dekrementace operace nebo await výraz. Jeho výsledek, pokud existuje, se zahodí.
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();
}
Definice těla výrazu můžete použít pro následující členy:
-
Metody a místní funkce: Člen, který vrací hodnotu, má formulář
T M() => expression;. Členvoidmá formulářvoid M() => statementExpression;. Další informace naleznete v tématu Metody a místní funkce. -
Operátory: Operátor má formulář
public static T operator +(T left, T right) => expression;. Další informace naleznete v tématu Přetížení operátoru. -
Vlastnosti a indexery: Vlastnost nebo indexer jen pro čtení má formulář
T P => expression;neboT this[int i] => expression;. Pro jednotlivé přístupové objekty můžete také použít těla výrazů. Příslušenstvígetmá tvarget => expression;. Asetneboinitpříslušenství má tvarset => statementExpression;neboinit => statementExpression;. Další informace naleznete v tématu Vlastnosti a indexery. -
Konstruktory a finalizátory: Tito členové mají formulář
C() => statementExpression;nebo~C() => statementExpression;. Další informace naleznete v tématu Konstruktory a finalizační metody. -
Přístupové objekty událostí: Tvar
addneboremovepříslušenství má tvaradd => statementExpression;neboremove => statementExpression;. Další informace naleznete v části Události .
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í funkcespecifikace jazyka C#.