iif equivalente en c #

¿Hay un IIf equivalente en C# ? O atajo similar?

C # tiene el “?” operador ternario, al igual que otros lenguajes tipo C. Sin embargo, esto no es perfectamente equivalente a iif. Hay dos diferencias importantes.

Para explicar el primero, esta llamada iif() causaría una excepción DivideByZero aunque la expresión sea verdadera porque iif es solo una función y todos los argumentos deben evaluarse antes de llamar:

 iif(true, 1, 1/0) 

Dicho de otra manera, iif no cortocircuita en el sentido tradicional, como lo indica su pregunta. Por otro lado, esta expresión ternaria sí y por eso está perfectamente bien:

 (true)?1:1/0; 

La otra diferencia es que iif no es seguro. Acepta y devuelve argumentos de tipo object . El operador ternario utiliza la inferencia de tipo para saber qué tipo está tratando. Tenga en cuenta que puede solucionar esto muy fácilmente con una implementación genérica, pero fuera de la caja así es.

Si realmente quieres iif () en C #, puedes tenerlo:

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

o una implementación genérica / tipo seguro:

 T iif(bool expression, T truePart, T falsePart) { return expression?truePart:falsePart;} 

Por otro lado, si quiere el operador ternario en VB, Visual Studio 2008 y posterior proporcionará un nuevo operador If que funciona más como el ternario de C #. Utiliza la inferencia de tipo para saber qué devuelve, y es un operador en lugar de una función, por lo que, aunque tiene semántica de funciones, no hay problemas en las expresiones de evaluación previa.

VB.NET:

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

DO#

 someBool ? "true" : "false"; 

el operador ternario

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

¿También es útil el operador de coalescencia?

VB:

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

DO#:

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

Ejemplo:

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

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

Es el operador ternario ?

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

Es limitado porque no puedes poner declaraciones allí. Solo puede poner valores (o cosas que devuelven / evalúan a valores), para devolver

Esto funciona (‘a’ es una int estática dentro de la clase Blah)

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

(los corchetes son implícitamente entre los iguales y el signo de interrogación).

Esto no funciona

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

Por lo tanto, solo puede usar el operador ternario c # para devolver los valores. Entonces no es como una forma abreviada de un if. Javascript y tal vez algunos otros idiomas le permiten poner declaraciones allí.