2016-07-20 7 views
1

Ich habe diesen Code:Conditional Operator ohne Rückgabewert

bool value = false; 
if(value) 
{ 
    Console.Write("true"); 
} 
else 
{ 
    Console.Write("false"); 
} 

und ich möchte es verkürzen, indem Sie den bedingten Operator, aber ich kann nicht die korrekte Syntax finden.

bool value = false; 
value ? Console.Write("true") : Console.Write("false"); // does not work 
+1

Warum möchten Sie? Alles, was Sie gewinnen, sind ein paar Schlüsselstriche, und Sie verlieren etwas Lesbarkeit. Sie können es auf eine einzelne Zeile setzen, wenn Sie möchten. – Maarten

Antwort

4

dem der Betreiber innerhalb Console.Write

Console.Write(value ? "true" : "false"); 

oder wenn Sie wirklich wollen, um den Wert schreiben:

Console.Write(value); 

, wenn Sie zwei unterschiedliche Methoden aufrufen möchten, können Sie Ihre if-Anweisung in einer Zeile schreiben:

if (value) Method1(); else Method2(); 
+0

Was ist, wenn es zwei verschiedene Methoden anstelle von' Console.Write' zweimal gibt? –

+0

Siehe meine Bearbeitung für diese Art von Problem – wertzui

4
bool value = false; 
    Console.Write(value ? "true" : "false"); 

Wenn Methode einen Wert zurückgibt dann

bool value = false; 
var result = value ? Test1() : Test2(); 

    private int Test1() 
    { 
     return 1; 
    } 

    private int Test2() 
    { 
     return 1; 
    } 
+1

Für dieses spezielle Beispiel ist das in Ordnung. Aber wenn op es für die Frage einfach halten würde und tatsächlich nach zwei verschiedenen Operationen anstatt nach zwei verschiedenen String-Werten fragt, deckt es das nicht ab. Ich nehme an, du kannst nur mit den Anforderungen arbeiten, die du dir gestellt hast. Also +1. –

+0

Was passiert, wenn es zwei verschiedene Methoden anstelle von 'Console.Write' zweimal gibt? –

0

nur das Hinzufügen einiger Präzisierungen zum vorherigen Antwort. Der Grund, warum Sie dies nicht tun können:

value ? Console.Write("true") : Console.Write("false"); 

Ist denn:

Der Bedingungsoperator (:) kehrt einen von zwei Werten auf dem Wert eines Booleschen Ausdrucks abhängig.

Quelle: MSDN

Das Stichwort hier ist "Rückkehr". Der ternäre Operator ersetzt eine if/else-Anweisung nicht genau, sondern ist zur Zuweisung bestimmt. Sie können natürlich eine Methode innerhalb einer ternären Operation aufrufen, solange sie einen booleschen Wert zurückgibt. Ein ternärer Operator muss etwas zurückgeben.