如果是运算符
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
街区。