¿Cuál es la diferencia entre And y AndAlso en VB.NET?

Resuelto Nakul Chaudhary asked hace 16 años • 13 respuestas

En VB.NET, ¿cuál es la diferencia entre Andy AndAlso? ¿Cuál debo usar?

Nakul Chaudhary avatar Nov 19 '08 21:11 Nakul Chaudhary
Aceptado

El Andoperador evalúa ambos lados, donde AndAlsoevalúa el lado derecho si y sólo si el lado izquierdo es verdadero.

Un ejemplo:

If mystring IsNot Nothing And mystring.Contains("Foo") Then
  ' bla bla
End If

Lo anterior arroja una excepción simystring = Nothing

If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
  ' bla bla
End If

Éste no arroja una excepción.

Entonces, si vienes del mundo C#, debes usarlo AndAlsocomo lo harías &&.

Más información aquí: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/

Nico avatar Nov 19 '2008 14:11 Nico

El Andoperador verificará todas las condiciones en la declaración antes de continuar, mientras que el operador Andalso se detendrá si sabe que la condición es falsa. Por ejemplo:

if x = 5 And y = 7

Comprueba si x es igual a 5 y si y es igual a 7, luego continúa si ambos son verdaderos.

if x = 5 AndAlso y = 7

Comprueba si x es igual a 5. Si no es así, no comprueba si y es 7, porque sabe que la condición ya es falsa. (Esto se llama cortocircuito).

Generalmente, la gente usa el método de cortocircuito si hay una razón para no verificar explícitamente la segunda parte si la primera parte no es verdadera, como si arrojaría una excepción si se marca. Por ejemplo:

If Not Object Is Nothing AndAlso Object.Load()

Si se usara Anden lugar de AndAlso, aún lo intentaría Object.Load()incluso si lo fuera nothing, lo que generaría una excepción.

Ed Marty avatar Nov 19 '2008 14:11 Ed Marty