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.

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;. Člen void má 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; nebo T this[int i] => expression;. Pro jednotlivé přístupové objekty můžete také použít těla výrazů. Příslušenství get má tvar get => expression;. A set nebo init příslušenství má tvar set => statementExpression; nebo init => 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 add nebo remove příslušenství má tvar add => statementExpression; nebo remove => 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#.

Viz také