Sdílet prostřednictvím


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

expressionmusí 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#.

Viz také