Der Operator „Lambdaausdruck“ (=>) definiert einen Lambdaausdruck.

Das Token => wird auf zwei Weisen unterstützt: als Lambdaoperator und als Trennzeichen eines Membernamens und der Memberimplementierung in der Definition eines Ausdruckskörpers.

Lambdaoperator

In Lambdaausdrücken trennt der Lambdaoperator => die Eingabeparameter auf der linken Seite vom Lambdakörper auf der rechten Seite.

Im folgenden Beispiel wird das LINQ-Feature mit der Methodensyntax verwendet, um die Verwendung von Lambdaausdrücken zu veranschaulichen:

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

Eingabeparameter eines Lambdaausdrucks sind zur Kompilierzeit stark typisiert. Wenn der Compiler die Typen von Eingabeparametern wie im obigen Beispiel ableiten kann, können Sie die Typdeklarationen weglassen. Wenn Sie den Typ von Eingabeparametern festlegen müssen, müssen Sie ihn wie im folgenden Beispiel gezeigt für jeden Parameter festlegen:

int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product);   // output: 280

Im folgenden Beispiel wird gezeigt, wie ein Lambdaausdruck ohne Eingabeparameter definiert wird:

Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());

Weitere Informationen finden Sie unter Lambdaausdrücke.

Ausdruckskörperdefinition

Eine Ausdruckstextdefinition hat die folgende allgemeine Syntax:

member => expression;

Dabei ist expression ein gültiger Ausdruck. Der Rückgabetyp von expression muss implizit in den Rückgabetyp des Members konvertiert werden können. Wenn das Element:

  • Den Rückgabetyp void hat oder
  • Ein ... ist:
    • Konstruktor
    • Finalizer
    • set-Accessor für eine Eigenschaft oder einen Indexer

Muss expression ein Anweisungsausdruck sein. Da das Ergebnis des Ausdrucks verworfen wird, kann der Rückgabetyp dieses Ausdrucks ein beliebiger Typ sein.

Im folgenden Beispiel wird eine Ausdruckskörperdefinition für eine Person.ToString-Methode angegeben:

public override string ToString() => $"{fname} {lname}".Trim();

Diese ist eine kompakte Version der folgenden Methodendefinition:

public override string ToString()
{
   return $"{fname} {lname}".Trim();
}

Sie können Ausdruckskörperdefinitionen für Methoden, Operatoren, schreibgeschützte Eigenschaften, Konstruktoren, Finalizer sowie Eigenschafts- und Indexerzugriffsmethoden erstellen. Weitere Informationen finden Sie unter Ausdruckskörpermember.

Operatorüberladbarkeit

Der Operator => kann nicht überladen werden.

C#-Sprachspezifikation

Weitere Informationen zum Lambdaoperator finden Sie im Abschnitt Anonyme Funktionsausdrücke der C#-Sprachspezifikation.

Weitere Informationen