359

En Perl (y otros idiomas) un operador ternario condicional puede expresarse así:¿Hay un operador ternario condicional en VB.NET?

my $foo = $bar == $buz ? $cat : $dog; 

¿Hay un operador similar en VB.NET?

+13

Un operador ternario es cualquier operador que toma tres operandos, como un operador binario necesitan dos y un operador unario toma uno. El operador?: es un ejemplo específico de un operador ternay, no la definición. – Zooba

+82

Sí, gracias, pero esa información no ayuda. –

+20

Es por eso que es un comentario, más que una respuesta. Comenté que había un respuesta correcta que identifica IIf que parece haber desaparecido ahora. – Zooba

Respuesta

474

Depende. El operador If en VB.NET 2008 actúa como un operador ternario. Esto se acaba de presentar, antes de 2008 esto no estaba disponible. Aquí hay más información: Visual Basic If announcement

Ejemplo:

Dim foo as String = If(bar = buz, cat, dog) 
+11

Antes de 2008 era IIf, que funcionaba de manera casi idéntica al operador If descrito en su enlace. – Zooba

+104

... con la importante diferencia de que Iif(), al ser una función, siempre evaluó tanto el consecuente como el alternativo, mientras que el nuevo If solo evalúa uno de ellos. –

+6

¿Qué significa? If (condición, parte verdadera, parte falsa). puedo rito? – kbvishnu

65

IIF siempre ha estado disponible en VB, incluso en VB6.

Dim foo as String = iif(bar = buz, cat, dog) 

No es un verdadero operador, como tal, sino una función en el espacio de nombres Microsoft.VisualBasic.

+30

Iif está cerca de un operador ternario, lo que significa no podrías usarlo en todas las condiciones en que lo harías con un If Then Else (u operador ternario). Por ejemplo, Value = Iif (1 = 1, 0, 1/0) explotaría, pero Value = If (1 = 1, 0, 1/0) no ... –

+3

VB no es compatible con la evaluación de cortocircuito (excepto para el operador AndAlso), por lo que los programadores de VB realmente no esperan que puedan evaluar con seguridad la mitad de una operación. Pero punto tomado, también iif es una función de corte que se puso para la compatibilidad con versiones anteriores de lo contrario sería un operador real. –

+33

Bueno para categorizar todos los programadores de VB ;-) Y también hay IsNot y OrElse para acceso directo, por lo que VB sí admite la evaluación de corto circuito. – HardCode

18

Si() es el equivalente más cercano, pero cuidado de conversiones implícitas pasando Si ha ajustado "Option Strict off"

Por ejemplo, si no tiene cuidado puede estar tentado a intentar algo como:

Dim foo As Integer? = If(someTrueExpression, Nothing, 2) 

¡Se le dará a "foo" el valor 0!

Creo que el '?' equivalente operador en C# en lugar de otro fallará la compilación

+5

Para completar, la mejor manera de escribir esa expresión es 'Dim foo As Integer? = If (someTrueExpression, New Integer ?, 2) '. –

+5

Tenga en cuenta que esto también ocurre con 'Option Strict On'. La razón es que 'Nothing' en VB.NET es equivalente a C#' default' (T) 'en vez de a' null'. – Heinzi

+1

Y para cualquier persona desconcertada con '¿Entero?' Significa que puede contener nulos - ver http://stackoverflow.com/questions/3628757/make-an-integer-null –

-5

Usar esta línea,

foo=IIf(bar=buz,cat,dog) 
+2

Este no es un operador ternario condicional. Es una función que se comporta de manera similar bajo ciertas circunstancias. –

1

Si ([argumento1] argumento2, argumento3) Cuando Si se llama mediante el uso de tres argumentos, el primer argumento debe evaluar a una valor que se puede convertir como Boolean. Ese valor booleano determinará cuál de los otros dos argumentos se evalúa y devuelve. La siguiente lista se aplica solo cuando se llama al operador If utilizando tres argumentos.

2

Puede utilizar este ejemplo:

Dim MyResult As String = If(MyString = MyCondition, "trueValue", "falseValue") 
+1

Una respuesta inútil que no agrega nada a las soluciones ya establecidas, años más tarde con la esperanza de ganar reputación. –

Cuestiones relacionadas