如果是运算符

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 街区。