And
оператор оценивает обе стороны, где AndAlso
оценивает правую сторону, если и только если левая сторона верна.
пример:
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
вышеупомянутое выдает исключение, если mystring = Nothing
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
Этот не выдает исключение.
Поэтому, если бы Вы происходите из мира C#, необходимо использовать AndAlso
как Вы, использовал бы &&
.
And
оператор проверит все условия в оператор перед продолжением, тогда как оператор Andalso остановится, если это будет знать, что условие является ложью. Например:
if x = 5 And y = 7
Проверки, если x равен 5, и если y равен 7, то продолжается, если оба верны.
if x = 5 AndAlso y = 7
Проверки, если x равен 5. Если это не, это не проверяет, равняется ли y 7, потому что это знает, что условие уже является ложью. (Это называют, закорачивая.)
Обычно люди используют метод замыкания накоротко, если существует причина для явно не, проверяют вторую часть, если бы первая часть не верна, такой, как будто это выдало бы исключение, если проверено. Например:
If Not Object Is Nothing AndAlso Object.Load()
, Если бы это использовало And
вместо AndAlso
, это все еще попробовало бы к Object.Load()
, даже если бы это было nothing
, который выдал бы исключение.
If Bool1 And Bool2 Then
Оценивает и Bool1 и Bool2
If Bool1 AndAlso Bool2 Then
, Оценивает Bool2, если и только если Bool1 верен.
AndAlso во многом как И, кроме него работы как & & в C#, C++, и т.д.
различие - то, что, если первый пункт (тот перед AndAlso) верен, второй пункт никогда не оценивается - составное логическое выражение "сорвано".
Это иногда очень полезно, например, в выражении, таком как:
If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
...
End If
Используя старое И в вышеупомянутом выражении бросил бы NullReferenceException, если бы myObj были пустыми.
Также посмотрите вопрос о Переполнении стека: я должен всегда использовать операторы AndAlso и OrElse? .
Также: комментарий для тех, кто упомянул, что использовал And
, если правая сторона выражения имеет побочный эффект, Вам нужно:
, Если правая сторона имеет побочный эффект, Вы нуждаетесь, просто перемещаете ее в левую сторону вместо использования "И". Вам только действительно нужно "И" если оба стороны имеют побочные эффекты. И если у Вас есть это много продолжений побочных эффектов, Вы, вероятно, делаете что-то еще неправильно. В целом действительно необходимо предпочесть AndAlso.