2012-07-02 40 views

回答

7

他們正在檢查相同的東西,但他們可能是意味着檢查不同的事情。

If IsNothing(TestString) Then 

而且

If TestString = Nothing Then 

不同的測試 - 第一個很少使用,因爲typicaly你只有真的想知道,如果它有一個非空值。但它可以用於在數據庫中以不同的方式處理空字符串,或者用於檢測可選參數的使用情況(這兩種情況都需要額外的工作以確保您不會無意中滑入錯誤的值,所以有點脆弱)。

在給出的示例中,測試實際上是一個有點羅嗦和混亂,如果這就是你要測試什麼,然後 如果String.IsNullOrEmpty(的TestString)然後

是去了解它的方式。如果該「和」應該是「或」,那麼使用IsNothing(TestString)可能是有意義的。

14

Nothing就根本沒有字符串(null其他語言),這是不是一個空字符串(""),這實際上是一個字符串不同。

但是,支票應該用If Not String.IsNullOrEmpty(TestString) Then替換,這樣可以更清楚地知道你在做什麼。

我剛剛在LINQPad上玩了一些,發現了一些有點令人驚訝的東西。在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 

在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 

我是不是很期待這一點。看來,VB.Net將Nothing視爲空字符串。我的猜測是爲了與舊版本的VB兼容。

這更加強調您應該使用String.IsNullOrEmpty進行這些檢查,因爲它更明確地檢查您的內容,並按預期工作。

+1

+1偷走了我口中的話。 Erich,如果一個字符串沒有被設置,它就是Nothing,如果一個字符串=「」它是空的。 –

+0

我完全困惑。在MSDN上它說,對於VB中的String類型的變量,Nothing =「」。如果是這樣的話,看起來上面是多餘的 –

+1

我的猜測會是由更熟悉C#的人完成的,他有不同的行爲,並且不知道IsNullOrEmpty。 –

3

是,通過VB.NET ""定義等同於Nothing包括=<>和所有VB功能;除非您明確關心差異,例如通過檢查Is

當然,使用通用的.NET函數時會看到不同,特別是str.Method會失敗並帶有空引用異常的方法。

順便說一句我猜在OP中的摘錄是C#代碼(嚴重)轉換。

相關問題