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' Ifoperatore 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' Ifoperatore sopra descritto.
Esempio:
Dim foo as String = IIf(bar = buz, cat, dog)
Iifrestituisce 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 Nothingin 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?).