Si, IIf() et Si()
-
09-06-2019 - |
Question
J'ai récemment posé une question sur la IIf vsSi et a découvert qu'il existe une autre fonction dans VB appelé Si ce qui se fait de la même chose que IIf mais c'est un court-circuit.
Ce n' Si la fonction de faire mieux que la IIf la fonction?L' Si déclaration de l'emporter sur les Si et IIf fonctions?
La solution
Merde, j'ai vraiment cru que vous parliez de l'opérateur tout au long de.;-) De toute façon ...
Cette fonction Si faire mieux que la fonction IIf?
Certainement.Rappelez-vous, il est intégré dans la langue.Un seul des deux conditionnelle arguments doit être évaluée, la possibilité de sauver une coûteuse opération.
Ne l'instruction Si l'emporter sur les Si et les fonctions IIf?
Je pense que vous ne pouvez pas comparer les deux parce qu'ils font des choses différentes.Si votre code sémantiquement effectue une mission, vous devez insister sur ce, au lieu de la prise de décision.L'utilisation de la If
opérateur de la place de la déclaration.Cela est particulièrement vrai si vous pouvez l'utiliser lors de l'initialisation d'une variable parce que sinon, la variable sera initialisé par défaut, ce qui a ralenti le code:
Dim result = If(a > 0, Math.Sqrt(a), -1.0)
' versus
Dim result As Double ' Redundant default initialization!
If a > 0 Then
result = Math.Sqrt(a)
Else
result = -1
End If
Autres conseils
Un très important distincte entre les IIf()
et If()
c'est qu'avec Option Infer On
le plus tard sera convertie implicitement les résultats pour le même type de données dans certains cas, comme lorsque les IIf
sera de retour Object
.
Exemple:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
Sortie:
iifVal
a valeur de Rien et le type de l'Objet
ifVal
a une valeur de 0 et de type Integer, b/c il est implicitement la conversion de Rien à un Entier.