Domanda

Esiste un IIf equivalente in C # ? O una scorciatoia simile?

È stato utile?

Soluzione

C # ha l'operatore ternario ? , come altri linguaggi in stile C. Tuttavia, questo non è perfettamente equivalente a IIf () ; ci sono due differenze importanti.

Per spiegare la prima differenza, l'argomento della parte falsa per questa chiamata IIf () provoca un DivideByZeroException , anche se l'argomento booleano è True .

IIf(true, 1, 1/0)

IIf () è solo una funzione e, come tutte le funzioni, tutti gli argomenti devono essere valutati prima di effettuare la chiamata. Detto in altro modo, IIf () non non in cortocircuito in senso tradizionale. D'altra parte, questa espressione ternaria fa cortocircuito, e quindi va benissimo:

(true)?1:1/0;

L'altra differenza è IIf () non è sicuro. Accetta e restituisce argomenti di tipo Object . L'operatore ternario è di tipo sicuro. Usa l'inferenza di tipo per sapere con quali tipi ha a che fare. Nota che puoi risolverlo molto facilmente con la tua implementazione IIF (Of T) () generica, ma pronta all'uso non è così.

Se vuoi davvero IIf () in C #, puoi averlo:

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

o un'implementazione generica / sicura:

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

D'altra parte, se si desidera l'operatore ternario in VB, Visual Studio 2008 e versioni successive forniscono un nuovo If () operatore che funziona come l'operatore ternario di C #. Usa l'inferenza del tipo per sapere cosa sta tornando, ed è davvero un operatore piuttosto che una funzione. Questo significa che non ci sono problemi da espressioni pre-valutate, anche se ha una semantica di funzione.

Altri suggerimenti

VB.NET:

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

C #

someBool ? "true" : "false";

l'operatore ternario

bool a = true;

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

Utile anche l'operatore di coalescenza ??:

VB:

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

C #:

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

Esempio:

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

http://zamirsblog.blogspot.com/2011/12/c -vb-equivalenti-di-iif.html

È l'operatore ternario ?

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

È limitato dal fatto che non puoi inserire dichiarazioni. Puoi solo inserire valori (o cose che restituiscono / valutano valori), per restituire

Funziona ('a' è un int statico all'interno della classe Blah)

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

(le parentesi tonde sono tra le uguali e il punto interrogativo).

Questo non funziona.

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

Quindi puoi usare l'operatore c # ternary solo per restituire valori. Quindi non è proprio come una forma abbreviata di un if. Javascript e forse altre lingue ti consentono di inserire delle dichiarazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top