En Perl (et dans d'autres langues), un opérateur ternaire conditionnel peut être exprimé comme ceci:
my $foo = $bar == $buz ? $cat : $dog;
Existe-t-il un opérateur similaire dans VB.NET?
vb.net
operators
conditional-operator
short-circuiting
Jim Counts
la source
la source
Réponses:
Dépend de la version. L'
If
opérateur dans VB.NET 2008 est un opérateur ternaire (ainsi qu'un opérateur de coalescence nulle). Cela vient d'être introduit, avant 2008, il n'était pas disponible. Voici quelques informations supplémentaires: Visual Basic If annonceExemple:
[ÉDITER]
Avant 2008, c'était le cas
IIf
, qui fonctionnait presque à l'identique de l'If
opérateur décrit ci-dessus.Exemple:
la source
Iif
renvoie toujours un objet de typeObject
, tandis queIf(bool, obj, obj)
permet la vérification de type avec l'option strict on. (Dim var As Integer = Iif(true, 1, 2)
ne compilera pas avec l'option stricte car vous pourriez tout aussi facilement écrireDim var As Integer = Iif(true, new Object(), new Object())
. Vous pouvez cependant écrireDim var As Integer = If(true, 1, 2)
avec l'option stricte, car cela vérifiera le type renvoyé.)iif a toujours été disponible en VB, même en VB6.
Ce n'est pas un véritable opérateur en tant que tel, mais une fonction dans l'espace de noms Microsoft.VisualBasic.
la source
Si () est l'équivalent le plus proche, mais méfiez - vous des conversions implicites en cours si vous avez désactivé "Option Strict off"
Par exemple, si vous ne faites pas attention, vous pourriez être tenté d'essayer quelque chose comme:
Donnera à "foo" une valeur de 0!
Je pense que le '?' L'opérateur équivalent en C # échouerait à la place la compilation
la source
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.Option Strict On
. La raison en est queNothing
dans VB.NET est équivalent à C #default(T)
plutôt qu'ànull
.Integer?
cela signifie qu'il est nul - voir stackoverflow.com/questions/3628757/make-an-integer-nullCType(Nothing, DateTime?
).