Operator ?: (C#-Referenz)

Der bedingte Operator (?:) gibt abhängig vom Wert eines booleschen Ausdrucks einen von zwei Werten zurück. Nachfolgend ist die Syntax für den bedingten Operator aufgeführt.

condition ? first_expression : second_expression;  

Hinweise

condition muss mit true oder false ausgewertet werden. Wenn condition den Wert true hat, wird first_expression ausgewertet. Wenn condition den Wert false hat, wird second_expression ausgewertet. Nur einer der beiden Ausdrücke wird ausgewertet.

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.

Sie können mithilfe des bedingten Operators Berechnungen präziser ausdrücken, die andernfalls möglicherweise eine if-else-Konstruktion benötigen. 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.

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. Der Ausdruck a ? b : c ? d : e wird als a ? b : (c ? d : e) und nicht als (a ? b : c) ? d : e ausgewertet.

Der bedingte Operator kann nicht überladen werden.

Beispiel

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 auch

C#-Referenz
C#-Programmierhandbuch
C#-Operatoren
if-else
?.- und ?-Operatoren
?? Operator