2012-07-02 6 views

Odpowiedz

7

Sprawdzają próbkowanie, ale MOGĄ być oznaczać, aby sprawdzić różne rzeczy.

If IsNothing(TestString) Then 

I

If TestString = Nothing Then 

są różne testy - pierwszy jest rzadko używane, ponieważ typicaly tylko naprawdę chce wiedzieć, czy to ma niepusty wartość. Ale może być używany do traktowania pustego ciągu i wartości null inaczej w DB, lub do wykrywania użycia opcjonalnego parametru (oba przypadki wymagają dodatkowej pracy, aby upewnić się, że nie przypadkowo poślizgniesz się w niewłaściwej wartości, więc nieco kruchy).

W podanym przykładzie, badanie jest rzeczywiście nieco rozwlekły i mylące, jeśli to, co chcesz przetestować następnie Jeśli string.IsNullOrEmpty (TestString) Następnie

jest sposób się do tego zabrać. Jeśli to "i" miało być "lub", to może mieć sens używanie IsNothing (TestString).

14

Nothing byłoby żadnych znaków na wszystkich (null w innych językach), który jest inny niż pusty ciąg (""), który jest faktycznie ciągiem.

Czek należy jednak zastąpić numerem If Not String.IsNullOrEmpty(TestString) Then, dzięki czemu jest bardziej zrozumiałe, co dokładnie robisz.

Po prostu bawiłem się tym trochę w LINQPad i odkryłem coś lekko zaskakującego. W 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 

w 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 

I nie dość, że spodziewa. Wygląda na to, że VB.Net traktuje Nothing jako pusty ciąg. Zgaduję, że chodzi o kompatybilność ze starszymi wersjami VB.

To wzmacnia, tym bardziej, że powinieneś używać tego rodzaju kontroli, ponieważ jest bardziej jednoznaczny, co sprawdzasz i działa zgodnie z oczekiwaniami.

+1

+1 ukradłem słowa z moich ust. Erich, jeśli ciąg nie został ustawiony, to nic, jeśli ciąg znaków = "" jest pusty. –

+0

Jestem całkowicie zdezorientowany. W MSDN mówi, że dla zmiennych typu String w VB, Nothing = "". Jeśli tak jest, wydaje się, że powyższe jest zbędne. –

+1

Zgaduję, że to by było zrobione przez kogoś, kto był bardziej obeznany z C#, który ma inne zachowanie i nie wie o IsNullOrEmpty. –

3

Tak, zgodnie z definicją w VB.NET "" jest równoważna Nothing tym dla =, <> i wszystkich VB funkcji; chyba że wyraźnie dbasz o różnicę, na przykład sprawdzając pod numerem Is.

Oczywiście różnice będą widoczne podczas używania ogólnych funkcji .NET, a zwłaszcza metod, w których str.Method zakończy się niepowodzeniem z wyjątkiem odwołania do wartości Null.

BTW Zgaduję, że fragment w OP jest kod C# (źle) konwertowane.

Powiązane problemy