Visual Basic .NET Language
Bedingungen
Suche…
WENN ... Dann ... Else
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
Wenn Betreiber
If(condition > value, "True", "False")
Wir können den If- Operator anstelle von If ... Then ... Else..End If- Anweisung blockieren.
Betrachten Sie das folgende Beispiel:
If 10 > 9 Then
MsgBox("True")
Else
MsgBox("False")
End If
ist das gleiche wie
MsgBox(If(10 > 9, "True", "False"))
If()
verwendet eine Kurzschlussbewertung , dh es werden nur die von ihm verwendeten Argumente ausgewertet. Wenn die Bedingung falsch ist (oder ein Nullable
, der Nothing
), wird die erste Alternative überhaupt nicht bewertet und keine ihrer Nebenwirkungen wird beobachtet. Dies ist im Grunde dasselbe wie der ternäre Operator von C # in Form von condition?a:b
.
Dies ist besonders nützlich, um Ausnahmen zu vermeiden:
Dim z As Integer = If(x = 0, 0, y/x)
Wir alle wissen, dass das Teilen durch Null eine Ausnahme auslöst, aber If()
hier verhindert, dass ein Kurzschluss nur zu dem Ausdruck führt, den die Bedingung bereits gewährleistet hat.
Ein anderes Beispiel:
Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)
Wenn varString <> "N/A"
Wert False
varDate
, wird der Wert von Now.Date
als Now.Date
ohne den ersten Ausdruck auszuwerten.
Ältere Versionen von VB verfügen nicht über den Operator If()
und müssen mit der integrierten Funktion IIf()
. Da es sich um eine Funktion und nicht um einen Operator handelt, wird kein Kurzschluss verursacht. Alle Ausdrücke werden mit allen möglichen Nebeneffekten ausgewertet, einschließlich Leistungsstrafen, Statusänderungen und Ausnahmen. (Die beiden obigen Beispiele, die Ausnahmen vermeiden, würden bei einer Konvertierung in IIf
.) Wenn eine dieser Nebenwirkungen ein Problem darstellt, können keine Inline-Bedingungen verwendet werden. If..Then
stattdessen auf If..Then
Blöcke wie üblich.