In Perl (e in altre lingue) un operatore ternario condizionale può essere espresso in questo modo:
my $foo = $bar == $buz ? $cat : $dog;
Esiste un operatore simile in VB.NET?
In Perl (e in altre lingue) un operatore ternario condizionale può essere espresso in questo modo:
my $foo = $bar == $buz ? $cat : $dog;
Esiste un operatore simile in VB.NET?
Risposte:
Dipende dalla versione. L' If
operatore in VB.NET 2008 è un operatore ternario (nonché un operatore a coalescenza nulla). Questo è stato appena introdotto, prima del 2008 non era disponibile. Ecco alcune altre informazioni: Visual Basic Se l'annuncio
Esempio:
Dim foo as String = If(bar = buz, cat, dog)
[MODIFICARE]
Prima del 2008 lo era IIf
, che funzionava in modo quasi identico con l' If
operatore sopra descritto.
Esempio:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
restituisce sempre un oggetto di tipo Object
, mentre If(bool, obj, obj)
consente il controllo del tipo con l'opzione rigorosa su. ( Dim var As Integer = Iif(true, 1, 2)
non verrà compilato con l'opzione rigorosa su perché potresti scrivere altrettanto facilmente Dim var As Integer = Iif(true, new Object(), new Object())
. Puoi comunque scrivere Dim var As Integer = If(true, 1, 2)
con l'opzione rigorosa su, perché controllerà il tipo restituito.)
iif è sempre stato disponibile in VB, anche in VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Non è un vero operatore, in quanto tale, ma una funzione nello spazio dei nomi Microsoft.VisualBasic.
If () è l'equivalente più vicino ma attenzione fai alle conversioni implicite in corso se hai impostato "Opzione rigorosa"
Ad esempio, se non stai attento potresti essere tentato di provare qualcosa del tipo:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Darà "pippo" un valore di 0!
Penso che la '?' l'operatore equivalente in C # fallirebbe invece nella compilazione
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. Il motivo è che Nothing
in VB.NET è equivalente a C # default(T)
piuttosto che a null
.
Integer?
significa che è annullabile - vedi stackoverflow.com/questions/3628757/make-an-integer-null
CType(Nothing, DateTime?
).