Оператор И в VB.NET выполняет два задания, он является логическим и математическим оператором. Ранние версии Visual Basic не отличались между ними. По дизайну, язык был разработан, чтобы быть простым в использовании и заставляя программистов на Visual Basic изучать разницу, чего хотели избежать разработчики языка.
Это работало довольно хорошо, хотя это дало языку несколько причуд. Значение True, например, не равно 1, как и на многих языках, оно равно -1. Значение, которое вы получаете от CInt (True). Который позволяет игнорировать разницу между двумя операциями оператора, он по-прежнему хорошо работает, когда оператор If() использует И, когда левая сторона является целым, а правая сторона - логическая, например.
Но есть довольно специфическая проблема с оператором And, играющим обе роли. Общее применение, чтобы написать такое заявление:
If ix < array.Length And array(ix) <> 42 Then
'' do something
End If
Это заявление, которое сделает ваш код аварии с IndexOutOfRangeException. То, что вы указали , является «если индекс за пределами границ, то не мешайте проверке элемента массива». Это называется «оценка короткого замыкания». Но это не то, что делает оператор И, он оценивает как левое, так и правильное выражения. Как и оператор математический, оператор And должен сделать.
Оценка короткого замыкания важна и длится довольно долго. И повсеместно принято на языках фигурной скобки, начиная с С. И, наконец, получили принято в VB.NET, а также, вы пишете это так, чтобы избежать исключения:
If ix < array.Length AndAlso array(ix) <> 42 Then
'' do something
End If
Так, чтобы ответить на ваш вопрос: Да , всегда используйте AndAlso, когда вы хотели использовать логический вариант оператора And. AndAlso - это логическая версия.
, так как 99,99% использования должно быть 'AndAlso', почему бы не' AndAlso' становиться 'And', а' And' становится другим ключевым словом? – Alaa