?: Operator (C#-Referenz)?: Operator (C# Reference)

Der bedingte Operator ?:, häufig als ternärer bedingter Operator bekannt, wertet einen booleschen Ausdruck aus und gibt das Ergebnis der Auswertung von einem oder zwei Ausdrücken zurück, abhängig davon, ob der boolesche Ausdruck true oder false ergibt.The conditional operator ?:, commonly known as the ternary conditional operator, evaluates a Boolean expression, and returns the result of evaluating one of two expressions, depending on whether the Boolean expression evaluates to true or false. Beginnend mit C# 7.2 gibt der bedingte Ref-Ausdruck den Verweis auf das Ergebnis eines der beiden Ausdrücke zurück.Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.

Die Syntax für den bedingten Operator lautet:The syntax for the conditional operator is as follows:

condition ? consequent : alternative

Der condition-Ausdruck muss als true oder false ausgewertet werden.The condition expression must evaluate to true or false. Wenn condition true ergibt, wird der consequent-Ausdruck ausgewertet, und das Ergebnis ist das Ergebnis des Vorgangs.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. Wenn condition false ergibt, wird der alternative-Ausdruck ausgewertet, und das Ergebnis ist das Ergebnis des Vorgangs.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. Nur consequent oder alternative wird ausgewertet.Only consequent or alternative is evaluated.

Der Typ von consequent und alternative muss identisch sein, oder es muss eine implizite Konvertierung von einem Typ in einen anderen vorhanden sein.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

Der bedingte Operator ist rechtsassoziativ, d.h. ein Ausdruck der FormThe conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

wird wie folgt ausgewertetis evaluated as

a ? b : (c ? d : e)

Eine praktische Gedächtnisstütze für die Auswertung des Operators ist die folgende Frage:A handy mnemonic device you can use to remember how this operator evaluates is by asking:

is this condition true ? yes : no

Dabei fungiert das ?with the ? im Operatorausdruck als Fragezeichen für die vorherige Anweisung und die daraus folgende Handlung als logische Antwort auf diese Frage.part of the operator acting as a question mark for the previous statement, and the consequent acting as the logical response to this question.

Im folgenden Beispiel wird die Verwendung des bedingten Operators veranschaulicht:The following example demonstrates the usage of the conditional operator:

double sinc(double x) => x != 0.0 ? Math.Sin(x) / x : 1;

Console.WriteLine(sinc(0.1));
Console.WriteLine(sinc(0.0));
// Output:
// 0.998334166468282
// 1

Bedingter ref-AusdruckConditional ref expression

Beginnend mit C# 7.2 können Sie mit dem bedingten ref-Ausdruck den Verweis auf das Ergebnis eines der beiden Ausdrücke zurückgeben.Beginning with C# 7.2, you can use the conditional ref expression to return the reference to the result of one of the two expressions. Sie können diesen Verweis einer lokalen Ref-Variablen oder schreibgeschützten lokalen Ref-Variablen zuweisen bzw. als Verweisrückgabewert oder ref-Methodenparameter verwenden.You can assign that reference to a ref local or ref readonly local variable, or use it as a reference return value or as a ref method parameter.

Die Syntax für den bedingten ref-Ausdruck lautet:The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

Wie der ursprüngliche bedingte Operator wertet der bedingte ref-Ausdruck nur einen von zwei Ausdrücken aus: entweder consequent oder alternative.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

Im Fall des bedingten ref-Ausdrucks muss der Typ von consequent und alternative identisch sein.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

Im folgenden Beispiel wird die Verwendung des bedingten ref-Ausdrucks veranschaulicht:The following example demonstrates the usage of the conditional ref expression:

var smallArray = new int[] { 1, 2, 3, 4, 5 };
var largeArray = new int[] { 10, 20, 30, 40, 50 };

int index = 7;
ref int refValue = ref ((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]);
refValue = 0;

index = 2;
((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]) = 100;

Console.WriteLine(string.Join(" ", smallArray));
Console.WriteLine(string.Join(" ", largeArray));
// Output:
// 1 2 100 4 5
// 10 20 0 40 50

Weitere Informationen finden Sie unter Hinweis zum Featurevorschlag.For more information, see the feature proposal note.

Bedingter Operator und eine if..else-AnweisungConditional operator and an if..else statement

Die Verwendung des bedingten Operators über einer if-else-Anweisung könnte in Fällen, in denen Sie einen Wert bedingt berechnen müssen, präziseren Code zur Folge haben.Use of the conditional operator over an if-else statement might result in more concise code in cases when you need conditionally to compute a value. Das folgende Beispiel zeigt zwei Möglichkeiten, eine ganze Zahl als negativ oder nicht negativ zu klassifizieren:The following example demonstrates two ways to classify an integer as negative or nonnegative:

int input = new Random().Next(-5, 5);

string classify;
if (input >= 0)
{
    classify = "nonnegative";
}
else
{
    classify = "negative";
}

classify = (input >= 0) ? "nonnegative" : "negative";

OperatorüberladbarkeitOperator overloadability

Der bedingte Operator kann nicht überladen werden.The conditional operator cannot be overloaded.

C#-ProgrammiersprachenspezifikationC# language specification

Weitere Informationen finden Sie im Abschnitt Bedingter Operator der C#-Programmiersprachenspezifikation.For more information, see the Conditional operator section of the C# language specification.

Siehe auchSee also