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

9.0
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.

9.0

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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow