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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top