如果是運算子
Version >= 9
If(condition > value, "True", "False")
我們可以使用 If 運算子而不是 If … Then … Else..End If 語句塊。
請考慮以下示例:
If 10 > 9 Then
MsgBox("True")
Else
MsgBox("False")
End If
是相同的
MsgBox(If(10 > 9, "True", "False"))
If()
使用短路評估,這意味著它只會評估它使用的引數。如果條件為假(或 Nullable
為 Nothing
),則根本不會評估第一種替代方案,並且不會觀察到任何副作用。這實際上與 ti #4 形式的 C# 三元運算子相同。
這對於避免異常特別有用:
Dim z As Integer = If(x = 0, 0, y/x)
我們都知道除以零會丟擲一個異常,但是這裡的 If()
通過短路來防止這個條件已經確保有效。
另一個例子:
Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)
如果 varString <> "N/A"
計算為 False
,它會將 varDate
的值指定為 Now.Date
而不評估第一個表示式。
Version < 9
較舊版本的 VB 沒有 If()
操作符,必須使用 IIf()
內建函式。因為它是一個函式,而不是運算子,但它確實不短路; 評估所有表示式,包括所有可能的副作用,包括效能損失,改變狀態和丟擲異常。 (如果轉換為 IIf
,上述兩個避免異常的例子都會丟擲。)如果這些副作用中的任何一個出現問題,就沒有辦法使用內聯條件; 相反,像往常一樣依靠 If..Then
街區。