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.