(1)先了解幾個與空類型相關的關鍵字和對象
Null : 關鍵字表示不引用任何對象的空引用,它是所有引用類型變量的默認值,在2.0版本之前也就只有引用變量類型可以為null,如(string a=null)但在c# 2.0版本之后,Net也引入了可以為Null的值類型,但變量在定義的時候方式有所不同,如:int ? a=null。詳細看http://msdn.microsoft.com/zh-cn/library/1t3y8s4s.aspx。不在內存中開辟內存地址,可用於引用是否可用。
DBNULL:是一個唯一類,也就是說這種類型的實例只有一個,即DBNull.Value。主要用來指示數據庫中的字段值為空(null)時在.Net中映射的值,另外還可以用於在 COM Interop 中區分 VT_NULL 變量(與空對象關聯)和 VT_EMPTY 變量(與 DBNull.Value 實例關聯)。詳細看http://msdn.microsoft.com/zh-cn/library/system.dbnull%28v=vs.80%29.aspx。它應該有固定不變的內存。
String.Empty和"":這兩個都表示空字符串,空字符串是一個特殊的字符串,所以它依然是一個字符串實例,也就是說它在內存中依然分配了明確的地址。
Convert.IsDBNull():返回有關指定對象是否為 DBNull 類型的指示。即是用來判斷對象是否為DBNULL的。其返回值是True或Flase。主要用於和數據庫操作相關的值判斷。
(2)各種的使用方法和效率
對象的判斷:使用Null可用於任何引用變量是否為空的判斷,是最基本的對象為空判斷方式,在和數據庫相關的操作中使用DBNull.vaule或者Convert.IsDBNUll。
字符串判斷:string在C#中也是一個引用類型,但其又具有一定的特殊性。我們在使用string時,往往會把“變量值為空的字符串對象”和“變量值為空字符的字符串對象”搞混。所以經常會因為對此理解不深引起好多問題,因為string是我們開發過程使用最頻繁的類型之一,對於字符串的判斷方法,通過對網上資料的整理和自己的實際操作經驗現總結如下:
string str
1:string.IsNullOrEmpty == str 這種方法是我最喜歡用的,它不但一次性能判斷"空的字符串變量",還能判斷“值為空字符串的變量”,並且還可以讓代碼簡潔美觀。判斷的效率也不算低。
2:str.Length == 0 這種方式,我不怎么喜歡用,不推薦使用。在網上看和自己的實際測試,確實能證明這種判斷方式的執行效率最高,但要使用它你必須保證字符串不null,如果為null就會報出異常,
3.str == string.Empty 或 str == "" 這兩種方式,我也不推薦使用,他只能判斷“值為空字符串”的字符串變量,而且效率比較低
4.str == null 這種方式我也不怎么推薦,原因和3一樣。