AndAlso 运算符 (Visual Basic)
对两个表达式执行短路逻辑与运算。
语法
result = expression1 AndAlso expression2
组成部分
术语 | 定义 |
---|---|
result |
必需。 任何 Boolean 表达式。 结果是这两个表达式比较的 Boolean 结果。 |
expression1 |
必需。 任何 Boolean 表达式。 |
expression2 |
必需。 任何 Boolean 表达式。 |
注解
如果编译的代码可以根据一个表达式的结果绕过另一个表达式的计算,则称逻辑运算为短路。 如果第一个表达式的计算结果决定运算的最终结果,则无需计算第二个表达式,因为这无法改变最终结果。 如果绕过的表达式很复杂,或者涉及过程调用,短路可以提高性能。
如果两个表达式的计算结果均为 True
,则 result
返回 True
。 下表说明了如何确定 result
。
如果 expression1 为 |
且 expression2 为 |
result 的值为 |
---|---|---|
True |
True |
True |
True |
False |
False |
False |
(未计算) | False |
注意
在布尔比较中,And
运算符始终计算这两个表达式,这可能包括进行过程调用。 AndAlso 运算符执行短路运算,这意味着如果 expression1
为 False
,则不计算 expression2
。
数据类型
AndAlso
运算符仅适用于布尔数据类型。 计算表达式之前,Visual Basic 根据需要将每个操作数转换为 Boolean
。 如果将结果分配给数值类型,Visual Basic 会将其从 Boolean
转换为该类型,从而 False
变为 0
,True
变为 -1
。
有关详细信息,请参阅布尔类型转换。
重载
可重载 And 运算符和 IsFalse 运算符,这意味着当操作数具有某一类或结构时,该类或结构可重新定义其行为。 重载 And
和 IsFalse
运算符会影响 AndAlso
运算符的行为。 如果代码在重载 And
和 IsFalse
的类或结构上使用 AndAlso
,请确保你了解其重新定义的行为。 有关详细信息,请参阅 Operator Procedures。
示例 1
以下示例使用 AndAlso
运算符对两个表达式执行逻辑与运算。 结果是一个 Boolean
值,该值表示整个联合表达式是否为 true。 如果第一个表达式为 False
,则不计算第二个表达式。
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b
前面的示例分别生成结果 True
、False
和 False
。 计算 secondCheck
时,不计算第二个表达式,因为第一个表达式已为 False
。 而是在计算 thirdCheck
时,计算第二个表达式。
示例 2
以下示例显示在数组元素中搜索给定值的 Function
过程。 如果数组为空,或者超出了数组长度,则 While
语句不会针对搜索值测试数组元素。
Public Function findValue(ByVal arr() As Double,
ByVal searchValue As Double) As Double
Dim i As Integer = 0
While i <= UBound(arr) AndAlso arr(i) <> searchValue
' If i is greater than UBound(arr), searchValue is not checked.
i += 1
End While
If i > UBound(arr) Then i = -1
Return i
End Function