En un proyecto de código mixto (VB y C#) nos depuración algún viejo código de Visual Basic así:Nada es igual a String.Empty, null no es igual a String.Empty, ¿qué me falta aquí?
If Request.Params("xxx") <> "" Then
'do something
que considera esto un error que podría ser Request.Params null
, en cuyo caso el estado haría' ve convertido en falso, que no era la idea.
Así que pensé. Me acabo de enterar - una vez más - que Nothing
de VB y C# 's null
no son las mismas cosas y Nothing
no es lo mismo que null
. De hecho:
if(String.Empty == null) // in C# this is always false (correct)
If String.Empty = Nothing Then ' in VB this is always true (????)
¿Cómo es esto posible? ¿Es esto un problema de compatibilidad con versiones anteriores?
Sí, gracias, eso lo entiendo :). Pero la primera parte de tu respuesta es intrigante. Iguales deberían dar una referencia igual a cuando se compara con Nada, ¿no es así? – Abel
Ah, ignora mi comentario anterior. Usted editó mientras tanto. Eso es más parecido, gracias por la referencia. Tampoco estoy tan feliz con eso. ¿Alguna (más) idea sobre la parte "por qué"? Suena muy parecido a Perl: todo es una cadena hasta nuevo aviso. – Abel
@Abel: ¿Qué parte - por qué querían preservar la compatibilidad con pre.NET VB, o por qué pre.NET VB tenía este tipo de comparación? –