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 运算符执行短路运算,这意味着如果 expression1False,则不计算 expression2

数据类型

AndAlso 运算符仅适用于布尔数据类型。 计算表达式之前,Visual Basic 根据需要将每个操作数转换为 Boolean。 如果将结果分配给数值类型,Visual Basic 会将其从 Boolean 转换为该类型,从而 False 变为 0True 变为 -1。 有关详细信息,请参阅布尔类型转换

重载

可重载 And 运算符IsFalse 运算符,这意味着当操作数具有某一类或结构时,该类或结构可重新定义其行为。 重载 AndIsFalse 运算符会影响 AndAlso 运算符的行为。 如果代码在重载 AndIsFalse 的类或结构上使用 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

前面的示例分别生成结果 TrueFalseFalse。 计算 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

请参阅