2008-08-26 10 views
10

ich vor kurzem eine Frage zu IIf vs. If gefragt und fand heraus, dass es eine andere Funktion in VB Wenn genannt ist, die im Grunde macht das Gleiche wie IIf aber ist ein Kurzschluss.Wenn IIf() und If()

Funktioniert dies Wenn Funktion besser als die IIf Funktion funktionieren? Ist die Wenn Aussage übertrumpfen die Wenn und IIf Funktionen?

Antwort

14

Verdammt, ich dachte wirklich, du sprichst die ganze Zeit über den Operator. ;-) Anyway ...

Funktioniert diese If-Funktion besser als die IIf-Funktion?

Definitiv. Denken Sie daran, es ist in die Sprache eingebaut. Nur eines der beiden bedingten Argumente muss ausgewertet werden, wodurch möglicherweise ein kostspieliger Vorgang eingespart wird.

Übertrumpft die If-Anweisung die Funktionen If und IIf?

Ich denke, Sie können die beiden nicht vergleichen, weil sie verschiedene Dinge tun. Wenn Ihr Code semantisch eine Zuweisung durchführt, sollten Sie dies betonen, anstatt die Entscheidung zu treffen. Verwenden Sie hier den Operator If anstelle der Anweisung. Dies gilt insbesondere, wenn Sie es bei der Initialisierung einer Variablen verwenden, da sonst die Variable initialisiert wird standardmäßig in langsamem Code resultierende:

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 
1

Ein sehr wichtige verschieden zwischen IIf() und If() ist, dass mit Option Infer On der später Implizit werden die Ergebnisse in bestimmten Fällen implizit auf den gleichen Datentyp umgesetzt, da IIfObject zurückgibt.

Beispiel:

Dim val As Integer = -1 
    Dim iifVal As Object, ifVal As Object 
    iifVal = IIf(val >= 0, val, Nothing) 
    ifVal = If(val >= 0, val, Nothing) 

Output:
iifVal hat Wert von nichts und die Art von Objekt
ifVal hat einen Wert von 0 und der Art der Integer, b/c implizit Nichts in eine ganze Zahl konvertiert.