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.
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 Typen von Eingabeparametern ableiten kann, wie im vorherigen Beispiel, können Sie Typdeklarationen weglassen. Wenn Sie den Typ der Eingabeparameter angeben müssen, müssen Sie dies für jeden Parameter tun, 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 hat die folgende allgemeine Syntax:
member => expression;
Dabei expression handelt es sich um einen gültigen Ausdruck. Der Rückgabetyp expression muss implizit in den Rückgabetyp des Mitglieds konvertierbar sein. Wenn das Mitglied:
- Hat einen
voidRückgabetyp oder - Ist ein:
- Konstruktor
- Finalizer
- Accessor für Eigenschaft oder Indexer
set
expression muss ein Anweisungsausdruck sein. Da das Ergebnis des Ausdrucks verworfen wird, kann der Rückgabetyp dieses Ausdrucks beliebiger Typ sein.
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 Methoden, Operatoren, schreibgeschützte Eigenschaften, Konstruktoren, Finalizer und Eigenschaften- und Indexer-Accessoren erstellen. Weitere Informationen finden Sie unter Ausdruckskörper.For more information, see Expression-bodied members.
Überlastbarkeit des Operators
Der => Operator kann nicht überladen werden.
C#-Sprachspezifikation
Weitere Informationen zum Lambda-Operator finden Sie im Abschnitt "Anonyme Funktionsausdrücke" der C#-Sprachspezifikation.