Est-il une condition ternaire de l'opérateur en VB.NET?
En Perl (et autres langues) conditionnelle d'un opérateur ternaire peut être exprimé comme ceci:
my $foo = $bar == $buz ? $cat : $dog;
Est-il similaire opérateur VB.NET?
- Un opérateur ternaire est un opérateur qui prend trois opérandes, un peu comme un opérateur binaire qui prend deux et un opérateur unaire prend un. L' ?: l'opérateur est un exemple précis de ternay opérateur, de ne pas la définition.
Vous devez vous connecter pour publier un commentaire.
Dépend de la version. Le
If
opérateur VB.NET 2008 est un opérateur ternaire (ainsi que d'un nul coalescence de l'opérateur). C'était juste introduit, avant 2008, ce n'était pas disponible. Voici quelques infos: Visual Basic S'annonceExemple:
[MODIFIER]
Avant 2008, il était de "IIf", qui a travaillé presque à l'identique pour le Si de l'opérateur décrit ci-Dessus.
Exemple:
Iif
toujours retourne un objet de typeObject
, alors queIf(bool, obj, obj)
permet la vérification de type avec option strict on. (Dim var As Integer = Iif(true, 1, 2)
ne sera pas compilé avec l'option strict car on pourrait tout aussi bien écrireDim var As Integer = Iif(true, new Object(), new Object())
. Vous POUVEZ écrireDim var As Integer = If(true, 1, 2)
avec option strict sur bien, parce qu'il va vérifier le type retourné.)iif a toujours été disponible dans visual basic, même en VB6.
Il n'est pas un vrai opérateur, en tant que telle, mais une fonction dans le Microsoft.VisualBasic espace de noms.
Si() est l'équivalent le plus proche, mais méfiez-vous de conversions implicites de passe si vous avez réglé "Option Strict off"
Par exemple, si vous n'êtes pas prudent, vous pourriez être tenté d'essayer quelque chose comme:
Donnera "foo" une valeur de 0!
Je pense que le '?' opérateur équivalent en C# serait plutôt de l'échec de la compilation
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.Option Strict On
. La raison en est queNothing
dans VB.NET est équivalent à C#'sdefault(T)
plutôt que denull
.Integer?
cela signifie que c'est nullable - voir stackoverflow.com/questions/3628757/make-an-integer-nullCType(Nothing, DateTime?
).