OrElse 运算符
更新:2007 年 11 月
对两个表达式执行短路包含逻辑析取。
result = expression1 OrElse expression2
各部分说明
result
必选。任何 Boolean 表达式。expression1
必选。任何 Boolean 表达式。expression2
必选。任何 Boolean 表达式。
备注
如果编译的代码可以根据一个表达式的计算结果跳过对另一表达式的计算,则将该逻辑运算称为“短路”。如果第一个表达式的计算结果可以决定运算的最终结果,则不需要计算另一个表达式,因为它不会更改最终结果。如果跳过的表达式很复杂或涉及过程调用,则短路可以提高性能。
如果其中一个表达式或两个表达式的计算结果为 True,则 result 为 True。下表阐释如何确定 result。
如果 expression1 为 |
并且 expression2 为 |
result 的值为 |
---|---|---|
True |
(不计算) |
True |
False |
True |
True |
False |
False |
False |
数据类型
仅为 Boolean 数据类型 (Visual Basic) 定义 OrElse 运算符。Visual Basic 根据需要将每个操作数转换为 Boolean,并在 Boolean 中执行整个操作。如果将此结果分配至 Numeric 类型,Visual Basic 会将其从 Boolean 转换为该类型。这会产生意外的行为。例如,将 5 OrElse 12 转换为 Integer 时,将产生 –1。
重载
可以“重载”Or 运算符 (Visual Basic) 和 IsTrue 运算符,这意味着当操作数具有某个类或结构的类型时,该类或结构可以重新定义其行为。重载 Or 和 IsTrue 运算符会影响 OrElse 运算符的行为。如果代码在重载了 Or 和 IsTrue 的类或结构上使用 OrElse,那么您一定要了解其重新定义的行为。有关更多信息,请参见运算符过程。
示例
下面的示例使用 OrElse 运算符对两个表达式执行逻辑析取。结果是一个 Boolean 值,它表示两个表达式中是否有一个为真。如果第一个表达式为 True,则不计算第二个表达式。
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b OrElse b > c
secondCheck = b > a OrElse b > c
thirdCheck = b > a OrElse c > b
上面的示例分别产生结果 True、True 和 False。在计算 firstCheck 的过程中,因为第一个表达式已经为 True,所以不计算第二个表达式。但是,在计算 secondCheck 时将计算第二个表达式。
下面的示例演示一个包含两个过程调用的 If...Then 语句。如果第一个调用返回 True,则不调用第二个过程。如果第二个过程执行运行此节代码时应始终执行的重要任务,这将产生意外结果。
If testFunction(5) = True OrElse otherFunction(4) = True Then
' If testFunction(5) is True, otherFunction(4) is not called.
' Insert code to be executed.
End If