En VB.NET, ¿cuál es la diferencia entre¿Cuál es la diferencia entre 'foo = Nothing' y 'foo is Nothing' en VB.NET?
if foo is Nothing Then
doStuff()
End If
y
if foo=Nothing Then
doStuff()
End If
actualización recibí la siguiente respuesta:
foo is Nothing
simplemente comprueba sifoo
no está asignado a ninguna referencia.foo = Nothing
comprueba si la referencia mantenida porfoo
es igual anothing
.
Después de ejecutar los tres estados,
Dim foo as Object
Dim bar as Integer
foo = bar
foo is Nothing
evalúa como falsa y foo = Nothing
un resultado verdadero.
Sin embargo, si bar
se declara como Object
y no se inicializa, entonces foo is Nothing
y foo = Nothing
ambos se evalúan como verdaderos. Creo que esto se debe a que Integer
es un tipo de valor y Object
es un tipo de referencia.
Para cadenas = y produce resultados diferentes, me atrevo a decir = se implementa con el principio de menor sorpresa para las cadenas así que lo considero correcto. –
@Lasse: Sí, las cadenas son un caso especial en VB, ya que '=' llamará a un método especial en lugar de 'Equals', que tratará' Nothing' igual a la cadena vacía. –
Olvidó Nullable (Of T). Para eso 'foo = Nothing' compilará, pero da la respuesta incorrecta. –