If, IIf() und If()
-
09-06-2019 - |
Frage
Ich habe kürzlich eine Frage gestellt IIf vs.Wenn und habe herausgefunden, dass es in VB eine weitere Funktion gibt, die aufgerufen wird Wenn was im Grunde das Gleiche bewirkt wie IIf aber es handelt sich um einen Kurzschluss.
Macht dies Wenn Funktion ist besser als die IIf Funktion?Tut das Wenn Aussage Trump die Wenn Und IIf Funktionen?
Lösung
Verdammt, ich dachte wirklich, dass du die ganze Zeit über den Operator sprichst.;-) Ohnehin …
Ist diese If-Funktion leistungsfähiger als die IIf-Funktion?
Definitiv.Denken Sie daran, es ist in die Sprache integriert.Es muss nur eines der beiden bedingten Argumente ausgewertet werden, was möglicherweise einen kostspieligen Vorgang einspart.
Übertrumpft die If-Anweisung die If- und IIf-Funktionen?
Ich denke, man kann die beiden nicht vergleichen, weil sie unterschiedliche Dinge tun.Wenn Ihr Code eine Zuweisung semantisch ausführt, sollten Sie dies betonen und nicht die Entscheidungsfindung.Benutzen Sie die If
Operator hier anstelle der Anweisung.Dies gilt insbesondere dann, wenn Sie es bei der Initialisierung einer Variablen verwenden können, da die Variable sonst standardmäßig initialisiert wird, was zu langsamerem Code führt:
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
Andere Tipps
Ein sehr wichtiger Unterschied zwischen IIf()
Und If()
ist das mit Option Infer On
Letzteres wandelt die Ergebnisse in bestimmten Fällen implizit in denselben Datentyp um wie where IIf
wird zurückkehren Object
.
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)
Ausgabe:
iifVal
hat den Wert „Nothing“ und den Typ „Object“.
ifVal
hat den Wert 0 und den Typ Integer, da es implizit Nothing in eine Integer umwandelt.