Nothing
sarebbe alcuna stringa affatto (null
in altre lingue), che è diverso da una stringa vuota (""
), che è in realtà una stringa.
Tuttavia, il controllo deve essere sostituito con If Not String.IsNullOrEmpty(TestString) Then
, che rende più chiaro ciò che si sta facendo esattamente.
Ho appena giocato con questo in LINQPad e ho trovato qualcosa di leggermente sorprendente. In 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
In 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
non ero abbastanza aspettavo. Sembra che VB.Net tratti uno Nothing
come una stringa vuota. La mia ipotesi è per la compatibilità con le versioni precedenti di VB.
Questo rinforza tanto più che si dovrebbe usare String.IsNullOrEmpty
per questi tipi di controlli, in quanto è più esplicito quello che si sta controllando, e funziona come previsto.
fonte
2012-07-02 02:30:07
+1 mi ha rubato le parole dalla bocca. Erich, se una stringa non è stata impostata è Nothing, se una stringa è = "" è vuota. –
Sono totalmente confuso. Su MSDN si dice che per le variabili di tipo String in VB, Nothing = "". Se questo è il caso, sembra che quanto sopra sia ridondante –
La mia ipotesi sarebbe che sia stata fatta da qualcuno che aveva più familiarità con C#, che ha un comportamento diverso, e non conosce IsNullOrEmpty. –