Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der 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. EinvoidElement weist das Formularvoid 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;oderT this[int i] => expression;. Sie können auch Ausdruckstexte für einzelne Accessoren verwenden. EingetAccessor verfügt über das Formularget => expression;. EinsetOder Accessor hat das Formularset => statementExpression;oderinit => 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
addAccessor hat das Formularadd => statementExpression;oderremoveremove => 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.