对两个表达式执行短路非独占逻辑分离。
语法
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 |
数据类型
仅 OrElse
为 布尔数据类型定义运算符。 Visual Basic 在计算表达式之前根据需要 Boolean
将每个作数转换为。 如果将结果分配给数值类型,Visual Basic 会将结果从 Boolean
该类型转换为该类型,以便 False
变为 0
和 True
变为 -1
该类型。
有关详细信息,请参阅 布尔类型转换。
重载
Or 运算符和 IsTrue 运算符可以重载,这意味着当作数的类型为该类或结构时,类或结构可以重新定义其行为。 重 Or
载和 IsTrue
运算符会影响运算符的行为 OrElse
。 如果代码在OrElse
重载Or
IsTrue
的类或结构上使用,请确保你了解其重新定义的行为。 有关详细信息,请参阅 运算符过程。
示例 1
以下示例使用 OrElse
运算符对两个表达式执行逻辑分解。 结果是一个值,该值表示两个 Boolean
表达式之一是否为 true。 如果第一个表达式是 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
前面的示例分别生成结果和False
结果True
True
。 在计算 firstCheck
中,不计算第二个表达式,因为第一个表达式已经 True
。 但是,第二个表达式在计算 secondCheck
中计算 。
示例 2
下面的示例演示一个包含两个 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