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

Der bedingte Operator (?:) gibt abhängig vom Wert eines booleschen Ausdrucks einen von zwei Werten zurück.The conditional operator (?:) returns one of two values depending on the value of a Boolean expression. Nachfolgend ist die Syntax für den bedingten Operator aufgeführt.Following is the syntax for the conditional operator.

condition ? first_expression : second_expression;  

HinweiseRemarks

condition muss mit true oder false ausgewertet werden.The condition must evaluate to true or false. Wenn condition den Wert true hat, wird first_expression ausgewertet.If condition is true, first_expression is evaluated and becomes the result. Wenn condition den Wert false hat, wird second_expression ausgewertet.If condition is false, second_expression is evaluated and becomes the result. Nur einer der beiden Ausdrücke wird ausgewertet.Only one of the two expressions is evaluated.

Entweder muss der Typ von first_expression und second_expression identisch sein, oder es muss eine implizite Konvertierung von einem Typ in einen anderen vorhanden sein.Either the type of first_expression and second_expression must be the same, or an implicit conversion must exist from one type to the other.

Sie können mithilfe des bedingten Operators Berechnungen präziser ausdrücken, die andernfalls möglicherweise eine if-else-Konstruktion benötigen.You can express calculations that might otherwise require an if-else construction more concisely by using the conditional operator. Im folgenden Code wird z. B. zuerst eine if-Anweisung und anschließend ein bedingter Operator verwendet, um eine ganze Zahl als positiv oder negativ zu klassifizieren.For example, the following code uses first an if statement and then a conditional operator to classify an integer as positive or negative.

int input = Convert.ToInt32(Console.ReadLine());  
string classify;  

// if-else construction.  
if (input > 0)  
    classify = "positive";  
else  
    classify = "negative";  

// ?: conditional operator.  
classify = (input > 0) ? "positive" : "negative";  

Der bedingte Operator ist rechtsassoziativ.The conditional operator is right-associative. Der Ausdruck a ? b : c ? d : e wird als a ? b : (c ? d : e) und nicht als (a ? b : c) ? d : e ausgewertet.The expression a ? b : c ? d : e is evaluated as a ? b : (c ? d : e), not as (a ? b : c) ? d : e.

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

BeispielExample

class ConditionalOp
{
    static double sinc(double x)
    {
        return x != 0.0 ? Math.Sin(x) / x : 1.0;
    }

    static void Main()
    {
        Console.WriteLine(sinc(0.2));
        Console.WriteLine(sinc(0.1));
        Console.WriteLine(sinc(0.0));
    }
}
/*
Output:
0.993346653975306
0.998334166468282
1
*/

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-OperatorenC# Operators
if-elseif-else
?. und? Operatoren?. and ?Operators
?? Operator?? Operator