Der Lambda-Ausdruck (=>)-Operator definiert einen Lambda-Ausdruck.

Das => Token wird in zwei Formen unterstützt: als Lambda-Operator und als Trennzeichen eines Membernamens und der Memberimplementierung in einer Ausdruckstextdefinition.

Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.

In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.

Tipp

Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.

Lambda-Operator

In Lambda-Ausdrücken trennt der Lambda-Operator=> die Eingabeparameter auf der linken Seite vom Lambda-Textkörper auf der rechten Seite.

Im folgenden Beispiel wird das LINQ-Feature mit Methodensyntax verwendet, um die Verwendung von Lambda-Ausdrü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 Lambda-Ausdrucks werden zur Kompilierungszeit stark eingegeben. Wenn der Compiler die Eingabeparametertypen ableiten, z. B. im vorherigen Beispiel, können Sie Typdeklarationen weglassen. Wenn Sie den Typ der Eingabeparameter angeben müssen, müssen Sie den Typ für jeden Parameter angeben, wie im folgenden Beispiel gezeigt:

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

Das folgende Beispiel zeigt, wie Sie einen Lambda-Ausdruck ohne Eingabeparameter definieren:

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

Weitere Informationen finden Sie unter Lambda-Ausdrücke.

Ausdruckstextdefinition

Eine Ausdruckstextdefinition verwendet die folgende allgemeine Syntax:

member => expression;

Für ein Element, das einen Wert zurückgibt, muss das Ergebnis des Ausdrucks implizit in den Rückgabetyp des Elements konvertierbar sein. Bei einem void Element, Konstruktor, Finalizer oder setinitaddAccessor remove muss der Textkörper ein Anweisungsausdruck sein. Ein Anweisungsausdruck kann eine Zuordnung, Methodenaufrufe, Objekterstellung, Inkrementierung oder Dekrementierungsoperation oder await Ausdruck sein. Wenn vorhanden, wird das Ergebnis verworfen.

Das folgende Beispiel zeigt eine Ausdruckstextdefinition für eine Person.ToString Methode:

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

Dies ist eine Kurzversion der folgenden Methodendefinition:

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

Sie können Ausdruckstextdefinitionen für die folgenden Elemente verwenden:

  • Methoden und lokale Funktionen: Ein Element, das einen Wert zurückgibt, weist das Formular T M() => expression;auf. Ein void Element weist das Formular void M() => statementExpression;auf. Weitere Informationen finden Sie unter Methoden und lokale Funktionen.
  • Operatoren: Ein Operator weist das Formular public static T operator +(T left, T right) => expression;auf. Weitere Informationen finden Sie unter Operatorüberladung.
  • Eigenschaften und Indexer: Eine schreibgeschützte Eigenschaft oder ein Indexer verfügt über das Formular T P => expression; oder T this[int i] => expression;. Sie können auch Ausdruckstexte für einzelne Accessoren verwenden. Ein get Accessor verfügt über das Formular get => expression;. Ein set Oder Accessor hat das Formular set => statementExpression; oder init => statementExpression;init . Weitere Informationen finden Sie unter "Eigenschaften " und "Indexer".
  • Konstruktoren und Finalizer: Diese Member haben das Formular C() => statementExpression; oder ~C() => statementExpression;. Weitere Informationen finden Sie unter Konstruktoren und Finalizer.
  • Ereignisaccessoren: Ein Accessor oder ein add Accessor hat das Formular add => statementExpression; oder removeremove => statementExpression;. Weitere Informationen finden Sie unter "Ereignisse".

Überlastbarkeit des Operators

Sie können den => Operator nicht überladen.

C#-Sprachspezifikation

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

Siehe auch