我看一些代碼,並來到acorss這一點:String <> Nothing和String <>「」VB.NET中的冗餘?
Dim TestString As String
...
If TestString <> Nothing And TestString <> "" Then
...
EndIf
都是條件檢查是一回事嗎?
感謝
我看一些代碼,並來到acorss這一點:String <> Nothing和String <>「」VB.NET中的冗餘?
Dim TestString As String
...
If TestString <> Nothing And TestString <> "" Then
...
EndIf
都是條件檢查是一回事嗎?
感謝
他們正在檢查相同的東西,但他們可能是意味着檢查不同的事情。
If IsNothing(TestString) Then
而且
If TestString = Nothing Then
不同的測試 - 第一個很少使用,因爲typicaly你只有真的想知道,如果它有一個非空值。但它可以用於在數據庫中以不同的方式處理空字符串,或者用於檢測可選參數的使用情況(這兩種情況都需要額外的工作以確保您不會無意中滑入錯誤的值,所以有點脆弱)。
在給出的示例中,測試實際上是一個有點羅嗦和混亂,如果這就是你要測試什麼,然後 如果String.IsNullOrEmpty(的TestString)然後
是去了解它的方式。如果該「和」應該是「或」,那麼使用IsNothing(TestString)可能是有意義的。
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
進行這些檢查,因爲它更明確地檢查您的內容,並按預期工作。
是,通過VB.NET ""
定義等同於Nothing
包括=
,<>
和所有VB功能;除非您明確關心差異,例如通過檢查Is
。
當然,使用通用的.NET函數時會看到不同,特別是str.Method
會失敗並帶有空引用異常的方法。
順便說一句我猜在OP中的摘錄是C#代碼(嚴重)轉換。
+1偷走了我口中的話。 Erich,如果一個字符串沒有被設置,它就是Nothing,如果一個字符串=「」它是空的。 –
我完全困惑。在MSDN上它說,對於VB中的String類型的變量,Nothing =「」。如果是這樣的話,看起來上面是多餘的 –
我的猜測會是由更熟悉C#的人完成的,他有不同的行爲,並且不知道IsNullOrEmpty。 –