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?
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?
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 annonce
Exemple:
Dim foo as String = If(bar = buz, cat, dog)
[ÉDITER]
Avant 2008, c'était le cas IIf
, qui fonctionnait presque à l'identique de l' If
opérateur décrit ci-dessus.
Exemple:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
renvoie toujours un objet de type Object
, tandis que If(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 écrire Dim var As Integer = Iif(true, new Object(), new Object())
. Vous pouvez cependant écrire Dim 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.
Dim foo as String = iif(bar = buz, cat, dog)
Ce n'est pas un véritable opérateur en tant que tel, mais une fonction dans l'espace de noms Microsoft.VisualBasic.
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:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Donnera à "foo" une valeur de 0!
Je pense que le '?' L'opérateur équivalent en C # échouerait à la place la compilation
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. La raison en est que Nothing
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-null
CType(Nothing, DateTime?
).