Frage

Gibt es ein IIf Äquivalent in C#? Oder ähnliche Abkürzung?

War es hilfreich?

Lösung

C # hat den ? ternären Operator, wie andere C-Stil Spricht. Dies ist jedoch nicht vollkommen gleichwertig IIf(); gibt es zwei wichtige Unterschiede.

Um den ersten Unterschied zu erklären, das falsch-Teil Argument für diesen IIf() Aufruf bewirkt einen DivideByZeroException, obwohl das boolean Argument True ist.

IIf(true, 1, 1/0)

IIf() ist nur eine Funktion, und wie alle Funktionen alle Argumente müssen ausgewertet werden, bevor der Anruf getätigt wird. Anders ausgedrückt, IIf() tut nicht Kurzschluss im traditionellen Sinne. Auf der anderen Seite, dieser ternäre Ausdruck tut Kurzschluss, und so ist völlig in Ordnung:

(true)?1:1/0;

Der andere Unterschied ist IIf() nicht sicher ist, ein. Er akzeptiert und gibt Argumente vom Typ Object. Der ternäre Operator ist Art sicher. Es verwendet Typinferenz zu wissen, welche Arten es zu tun haben. Beachten Sie dies Ihr eigenes Generikum IIF(Of T)() Implementierung beheben kann sehr einfach mit, aber aus dem Kasten heraus, dass es nicht der richtige Weg ist, ist.

Wenn Sie wirklich IIf() in C # möchten, können Sie es haben:

object IIf(bool expression, object truePart, object falsePart) 
{return expression?truePart:falsePart;}

oder eine generic / typsichere Implementierung:

T IIf<T>(bool expression, T truePart, T falsePart) 
{return expression?truePart:falsePart;}

Auf der anderen Seite, wenn Sie den ternären Operator in VB möchten, Visual Studio 2008 und bieten später eine neue If() Operator , die wie C # 's ternäre Operator funktioniert. Es verwendet Inferenz geben zu wissen, was es zurückkehrt, und es ist wirklich ein Bediener eher als eine Funktion. Das bedeutet, es gibt keine Probleme aus bereits Auswerten von Ausdrücken, auch wenn es Funktion Semantik hat.

Andere Tipps

VB.NET:

If(someBool, "true", "false")

C #

someBool ? "true" : "false";

der ternäre Operator

bool a = true;

string b = a ? "if_true" : "if_false";

Brauchbar ist auch der coalesce Operator ??:

VB:

Return Iif( s IsNot Nothing, s, "My Default Value" )

C #:

return s ?? "My Default Value";
booleanExpression ? trueValue : falseValue;

Beispiel:

string itemText = count > 1 ? "items" : "item";

http://zamirsblog.blogspot.com/2011/12/c -vb-Äquivalent-of-iif.html

Es ist der ternäre Operator ?

string newString = i == 1 ? "i is one" : "i is not one";

Es ist dadurch begrenzt, dass Sie keine Aussagen in dort setzen können. Sie können nur Werte setzen (oder Dinge, die Werte zurückgeben / auswerten), zurückzukehren

Das funktioniert ( 'a' ist eine statische int innerhalb Klasse Blah)

Blah.a=Blah.a<5?1:8;

(runde Klammern sind impicitly zwischen den Gleichen und dem Fragezeichen).

Das funktioniert nicht.

Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er");
or
Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er");

So Sie nur den c # ternären Operator für die Rückgabe Wert verwenden können. So ist es nicht ganz wie eine verkürzte Form eines if. Javascript und vielleicht einige andere Sprachen können Sie Aussagen in dort setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top