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?
vb.net
operators
conditional-operator
short-circuiting
Jim cuenta
fuente
fuente
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 anuncioEjemplo:
[EDITAR]
Antes de 2008 era
IIf
, lo que funcionaba casi de manera idéntica alIf
operador descrito anteriormente.Ejemplo:
fuente
Iif
siempre devuelve un objeto de tipoObject
, mientras queIf(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íaDim var As Integer = Iif(true, new Object(), new Object())
escribirDim 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.
No es un verdadero operador, como tal, sino una función en el espacio de nombres Microsoft.VisualBasic.
fuente
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:
¡Le dará a "foo" un valor de 0!
Creo que el '?' el operador equivalente en C # fallaría en su lugar la compilación
fuente
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.Option Strict On
. La razón es queNothing
en VB.NET es equivalente a C # endefault(T)
lugar de anull
.Integer?
, significa que es anulable - ver stackoverflow.com/questions/3628757/make-an-integer-nullCType(Nothing, DateTime?
).