Visual Basic .NET Language
Warunki
Szukaj…
JEŚLI ... Więc ... Jeszcze
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
Jeśli operator
If(condition > value, "True", "False")
Możemy użyć operatora If zamiast If ... Then ... Else..End If blokuje instrukcje.
Rozważ następujący przykład:
If 10 > 9 Then
MsgBox("True")
Else
MsgBox("False")
End If
jest taki sam jak
MsgBox(If(10 > 9, "True", "False"))
If()
używa oceny zwarcia , co oznacza, że będzie oceniał tylko argumenty, których używa. Jeśli warunek jest fałszywy (lub Nullable
czyli Nothing
), pierwsza alternatywa nie zostanie w ogóle oceniona i nie będzie obserwowany żaden z jej skutków ubocznych. Jest to faktycznie to samo, co operator trójskładnikowy języka C # w postaci condition?a:b
.
Jest to szczególnie przydatne w celu uniknięcia wyjątków:
Dim z As Integer = If(x = 0, 0, y/x)
Wszyscy wiemy, że dzielenie przez zero spowoduje zgłoszenie wyjątku, ale If()
tutaj chroni to przed zwarciem do tylko wyrażenia, które warunek już zapewnił, jest poprawne.
Inny przykład:
Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)
Jeśli varString <> "N/A"
ma wartość False
, będzie przypisać varDate
wartość „s jako Now.Date
bez oceny pierwszy wyraz.
Starsze wersje VB nie mają operatora If()
i muszą IIf()
wbudowaną funkcją IIf()
. Jako, że jest to funkcja, a nie operator, to nie ma zwarcia; wszystkie wyrażenia są oceniane, ze wszystkimi możliwymi skutkami ubocznymi, w tym karami za wydajność, zmianą stanu i zgłaszaniem wyjątków. (Oba powyższe przykłady, które unikają wyjątków, rzucałyby się, gdyby zostały przekonwertowane na IIf
.) Jeśli którykolwiek z tych efektów ubocznych stanowi problem, nie ma możliwości zastosowania wbudowanego warunkowego; zamiast tego polegaj na blokach If..Then
jak zwykle.