Nothing
serían ninguna cadena en absoluto (null
en otros idiomas), que es diferente a una cadena vacía (""
), que en realidad es una cadena.
Sin embargo, la verificación debe reemplazarse por If Not String.IsNullOrEmpty(TestString) Then
, lo que deja en claro qué es exactamente lo que está haciendo.
Acabo de jugar con esto en LINQPad, y encontré algo ligeramente sorprendente. En VB.NET:
Dim s1 as string = Nothing
Dim s2 as string = ""
Console.WriteLine(s1 is Nothing) 'True
Console.WriteLine(s2 is Nothing) 'False
Console.WriteLine(s1 = "") 'True
Console.WriteLine(s2 = "") 'True
Console.WriteLine(string.IsNullOrEmpty(s1)) 'True
Console.WriteLine(string.IsNullOrEmpty(s2)) 'True
en C#:
string s1 = null;
string s2 = "";
Console.WriteLine(s1 == null); //True
Console.WriteLine(s2 == null); //False
Console.WriteLine(s1 == ""); //False
Console.WriteLine(s2 == ""); //True
Console.WriteLine(string.IsNullOrEmpty(s1)); //True
Console.WriteLine(string.IsNullOrEmpty(s2)); //True
no estaba bastante esperaba eso. Parece que VB.Net trata un Nothing
como una cadena vacía. Supongo que es compatible con las versiones anteriores de VB.
Esto refuerza todo lo que debería usar String.IsNullOrEmpty
para este tipo de comprobaciones, ya que es más explícito lo que está comprobando y funciona como se esperaba.
+1 me robó las palabras de la boca. Erich, si una cadena no se ha establecido, es Nothing, si una cadena es = "" está vacía. –
Estoy totalmente confundido. En MSDN dice que para variables de tipo String en VB, Nothing = "". Si ese es el caso, parece que lo anterior es redundante –
Supongo que fue hecho por alguien que estaba más familiarizado con C#, que tiene un comportamiento diferente, y no sabe acerca de IsNullOrEmpty. –