如果是運算子

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() 使用短路評估,這意味著它只會評估它使用的引數。如果條件為假(或 NullableNothing),則根本不會評估第一種替代方案,並且不會觀察到任何副作用。這實際上與 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 街區。