Visual Basic .NET Language
Conditions
Recherche…
SI ... Alors ... Sinon
Dim count As Integer = 0
Dim message As String
If count = 0 Then
message = "There are no items."
ElseIf count = 1 Then
message = "There is 1 item."
Else
message = "There are " & count & " items."
End If
Si opérateur
If(condition > value, "True", "False")
Nous pouvons utiliser l'opérateur If au lieu de If ... Then ... Else..End If bloque les instructions.
Prenons l'exemple suivant:
If 10 > 9 Then
MsgBox("True")
Else
MsgBox("False")
End If
est le même que
MsgBox(If(10 > 9, "True", "False"))
If()
utilise l'évaluation de court-circuit , ce qui signifie qu'il n'évaluera que les arguments qu'il utilise. Si la condition est fausse (ou Nullable
qui est Nothing
), la première alternative ne sera pas évaluée du tout et aucun de ses effets secondaires ne sera observé. Ceci est effectivement le même que l' opérateur ternaire de C # sous la forme de condition?a:b
.
Ceci est particulièrement utile pour éviter les exceptions:
Dim z As Integer = If(x = 0, 0, y/x)
Nous savons tous que la division par zéro lancera une exception, mais If()
protège contre cela en court-circuitant uniquement l'expression que la condition a déjà assurée est valide.
Un autre exemple:
Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)
Si varString <> "N/A"
évalue à False
, il attribuera varDate
valeur de comme Now.Date
sans évaluer la première expression.
Les anciennes versions de VB n'ont pas l'opérateur If()
et doivent se débrouiller avec la fonction IIf()
. Comme il est une fonction, pas un opérateur, il ne court-circuit; toutes les expressions sont évaluées, avec tous les effets secondaires possibles, y compris les pénalités de performance, le changement d'état et les exceptions de lancement. (Les deux exemples ci-dessus qui évitent les exceptions seraient IIf
s'ils étaient convertis en IIf
.) Si l'un de ces effets secondaires présente un problème, il est impossible d'utiliser un conditionnel en ligne. au lieu de cela, compter sur If..Then
bloque comme d'habitude.