En Perl (y otros idiomas), un operador ternario condicional se puede expresar así:
my $foo = $bar == $buz ? $cat : $dog;
¿Hay un operador similar en VB.NET?
En Perl (y otros idiomas), un operador ternario condicional se puede expresar así:
my $foo = $bar == $buz ? $cat : $dog;
¿Hay un operador similar en VB.NET?
Respuestas:
Depende de la versión. El If
operador en VB.NET 2008 es un operador ternario (así como un operador de fusión nula). Esto se acaba de presentar, antes de 2008 no estaba disponible. Aquí hay más información: Visual Basic si anuncio
Ejemplo:
Dim foo as String = If(bar = buz, cat, dog)
[EDITAR]
Antes de 2008 era IIf
, lo que funcionaba casi de manera idéntica al If
operador descrito anteriormente.
Ejemplo:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
siempre devuelve un objeto de tipo Object
, mientras que If(bool, obj, obj)
permite la verificación de tipo con la opción estrictamente activada. ( Dim var As Integer = Iif(true, 1, 2)
no se compilará con la opción estrictamente activada porque podría Dim var As Integer = Iif(true, new Object(), new Object())
escribir Dim var As Integer = If(true, 1, 2)
con la misma facilidad . Sin embargo, PUEDE escribir con la opción estricta activada, ya que verificará el tipo devuelto.)
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.
If () es el equivalente más cercano, pero tenga cuidado con las conversiones implícitas si ha configurado "Option Strict off"
Por ejemplo, si no tiene cuidado, puede verse tentado a probar algo como:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
¡Le dará a "foo" un valor de 0!
Creo que el '?' el operador equivalente en C # fallaría en su lugar la compilación
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. La razón es que Nothing
en VB.NET es equivalente a C # en default(T)
lugar de a null
.
Integer?
, significa que es anulable - ver stackoverflow.com/questions/3628757/make-an-integer-null
CType(Nothing, DateTime?
).