Оператор AndAlso

Обновлен: Ноябрь 2007

Выполняет упрощенную операцию логического умножения над двумя выражениями.

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

Использование оператора AndAlso предназначено для проверки существования экземпляра объекта перед попыткой получения доступа к одному из его членов. Это показано в следующей строке кода.

If newObject AndAlso newObject.initFinished Then

Доступ к свойству initFinished в предыдущей строке кода может вызвать исключение NullReferenceException, если переменная newObject не имела назначенный ей экземпляр объекта. Однако использование оператора AndAlso приводит к тому, что компилятор обходит доступ к свойству initFinished, если переменная newObject равна Nothing, поскольку Nothing определяется как False.

Типы данных

Оператор AndAlso определен только для типа данных Boolean (Тип данных Boolean (Visual Basic)). В Visual Basic каждый операнд при необходимости преобразуется в тип Boolean, после чего операция полностью выполняется с использованием типа Boolean. Если результату назначить числовой тип, Visual Basic преобразует его из типа Boolean в этот тип. Это может привести к непредвиденному поведению. Например, результат операции 5 AndAlso 12 равен –1, если преобразуется в тип Integer.

Перегрузка

Оператор Оператор And (Visual Basic) и Оператор IsFalse может быть перегруженным. Это означает, что класс или структура может переопределить его поведение, если операнд имеет тип класса или структуры. Перегрузка операторовAnd и IsFalse влияет на поведение оператора AndAlso. Если в коде используется оператор AndAlso для класса или структуры, которая перегружает And и IsFalse, убедитесь, что вы понимаете его переопределенное поведение. Дополнительные сведения см. в разделе Процедуры операторов.

Пример

В данном примере оператор AndAlso используется для выполнения логического умножения двух выражений. Результат представляет собой значение Boolean, которое показывает, что объединенное выражение истинно. Если первое выражение является 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.

В следующем примере процедура 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

См. также

Основные понятия

Логические и побитовые операторы в Visual Basic

Ссылки

Логические (побитовые) операторы

Порядок применения операторов в Visual Basic

Список операторов, сгруппированных по функциональному назначению

Оператор And (Visual Basic)

Оператор IsFalse