Каково различие между И и AndAlso в VB.NET?

239
задан Peter Mortensen 7 September 2016 в 10:46
поделиться

5 ответов

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 как Вы, использовал бы &&.

[еще 1113] информация здесь: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/

368
ответ дан Karim AG 23 November 2019 в 03:19
поделиться

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, который выдал бы исключение.

29
ответ дан Peter Mortensen 23 November 2019 в 03:19
поделиться
If Bool1 And Bool2 Then

Оценивает и Bool1 и Bool2

If Bool1 AndAlso Bool2 Then

, Оценивает Bool2, если и только если Bool1 верен.

14
ответ дан Bryan Anderson 23 November 2019 в 03:19
поделиться

AndAlso во многом как И, кроме него работы как & & в C#, C++, и т.д.

различие - то, что, если первый пункт (тот перед AndAlso) верен, второй пункт никогда не оценивается - составное логическое выражение "сорвано".

Это иногда очень полезно, например, в выражении, таком как:

If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
   ...
End If

Используя старое И в вышеупомянутом выражении бросил бы NullReferenceException, если бы myObj были пустыми.

5
ответ дан Peter Mortensen 23 November 2019 в 03:19
поделиться

Также посмотрите вопрос о Переполнении стека: я должен всегда использовать операторы AndAlso и OrElse? .

Также: комментарий для тех, кто упомянул, что использовал And, если правая сторона выражения имеет побочный эффект, Вам нужно:

, Если правая сторона имеет побочный эффект, Вы нуждаетесь, просто перемещаете ее в левую сторону вместо использования "И". Вам только действительно нужно "И" если оба стороны имеют побочные эффекты. И если у Вас есть это много продолжений побочных эффектов, Вы, вероятно, делаете что-то еще неправильно. В целом действительно необходимо предпочесть AndAlso.

5
ответ дан Community 23 November 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: