Operator „=>-“ (C#-Referenz)=> operator (C# reference)

Das Token => wird auf zwei Weisen unterstützt: als Lambdaoperator und als Trennzeichen eines Membernamens und der Memberimplementierung in der Definition eines Ausdruckskörpers.The => token is supported in two forms: as the lambda operator and as a separator of a member name and the member implementation in an expression body definition.

LambdaoperatorLambda operator

In Lambdaausdrücken trennt der Lambdaoperator => die Eingabeparameter auf der linken Seite vom Lambdakörper auf der rechten Seite.In lambda expressions, the lambda operator => separates the input parameters on the left side from the lambda body on the right side.

Im folgenden Beispiel wird das LINQ-Feature mit der Methodensyntax verwendet, um die Verwendung von Lambdaausdrücken zu veranschaulichen:The following example uses the LINQ feature with method syntax to demonstrate the usage of lambda expressions:

string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
  .Where(w => w.StartsWith("a"))
  .Min(w => w.Length);
Console.WriteLine(minimalLength);   // output: 5

int[] numbers = { 1, 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.Input parameters of a lambda expression are strongly typed at compile time. Wenn der Compiler die Typen von Eingabeparametern wie im obigen Beispiel ableiten kann, können Sie die Typdeklarationen weglassen.When the compiler can infer the types of input parameters, like in the preceding example, you may omit type declarations. Wenn Sie den Typ von Eingabeparametern festlegen müssen, müssen Sie ihn wie im folgenden Beispiel gezeigt für jeden Parameter festlegen:If you need to specify the type of input parameters, you must do that for each parameter, as the following example shows:

int[] numbers = { 1, 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:The following example shows how to define a lambda expression without input parameters:

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

Weitere Informationen finden Sie unter Lambdaausdrücke.For more information, see Lambda expressions.

AusdruckskörperdefinitionExpression body definition

Eine Ausdruckstextdefinition hat die folgende allgemeine Syntax:An expression body definition has the following general syntax:

member => expression;

Dabei ist expression ein gültiger Ausdruck.where expression is a valid expression. Der Rückgabetyp von expression muss implizit in den Rückgabetyp des Members konvertiert werden können.The return type of expression must be implicitly convertible to the member's return type. Wenn der Rückgabetyp des Members void ist oder der Member ein Konstruktor, Finalizer oder ein set-Eigenschaftenaccessor ist, muss expression ein -Anweisungsausdruck sein, der dann einen beliebigen Typ aufweisen kann.If the member's return type is void or if the member is a constructor, a finalizer, or a property set accessor, expression must be a statement expression, which can be of any type.

Im folgenden Beispiel wird eine Ausdruckskörperdefinition für eine Person.ToString-Methode angegeben:The following example shows an expression body definition for a Person.ToString method:

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

Diese ist eine kompakte Version der folgenden Methodendefinition:It's a shorthand version of the following method definition:

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

Ausdruckskörperdefinitionen für Methoden, Operatoren und schreibgeschützte Eigenschaften werden ab C# 6 unterstützt.Expression body definitions for methods, operators, and read-only properties are supported beginning with C# 6. Ausdruckskörperdefinitionen für Konstruktoren, Finalizer sowie Eigenschaften- und Indexeraccessors werden ab C# 7.0 unterstützt.Expression body definitions for constructors, finalizers, and property and indexer accessors are supported beginning with C# 7.0.

Weitere Informationen finden Sie unter Ausdruckskörpermember.For more information, see Expression-bodied members.

OperatorüberladbarkeitOperator overloadability

Operator => kann nicht überladen werden.The => operator cannot be overloaded.

C#-SprachspezifikationC# language specification

Weitere Informationen zum Lambdaoperator finden Sie im Abschnitt Anonyme Funktionsausdrücke der C#-Sprachspezifikation.For more information about the lambda operator, see the Anonymous function expressions section of the C# language specification.

Siehe auchSee also