对两个表达式执行短路逻辑连线。
语法
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
。 如果代码在AndAlso
重载And
IsFalse
的类或结构上使用,请确保你了解其重新定义的行为。 有关详细信息,请参阅 运算符过程。
示例 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