C# 可空類(lèi)型
值類(lèi)型(大多數(shù)基本類(lèi)型,例如,int、double和所有結(jié)構(gòu))區(qū)別于引用類(lèi)型(string和任意類(lèi))的一種方式:值類(lèi)型必須包含一個(gè)值,它們可以在聲明之后、賦值之前,在未賦值的狀態(tài)下存在,但不能使用未賦值的變量。而引用類(lèi)型可以是mill。
有時(shí)讓值類(lèi)型為空是很有用的(尤其是處理數(shù)據(jù)庫(kù)時(shí)),泛型使用System.Nullable<T>類(lèi)型提供了使值類(lèi)型為空的一種方式。例如:
System.Nullable<int> nullablelnt;
這行代碼聲明了一個(gè)變量nullablelnt,它可以擁有int變量能包含的任意值,還可以擁有值null。所以可以編寫(xiě)如下的代碼:
nullablelnt = null;
如果nullablelnt是一個(gè)int類(lèi)型的變量,上面的代碼是不能編譯的。
前面的賦值等價(jià)于:
nullablelnt = new System.Nullable<int>();
與其他任意變量一樣,無(wú)論是初始化為null(使用上面的語(yǔ)法),還是通過(guò)給它賦值來(lái)初始化,都不能在初始化之前使用它。
可以像測(cè)試引用類(lèi)型一樣測(cè)試可空類(lèi)型,看看它們是否為null:
if (nullablelnt == null)
{
...
}
另外,可使用HasValue屬性:
if (nullablelnt.HasValue)
{
...
}
這不適用于引用類(lèi)型,即使引用類(lèi)型有一個(gè)HasValue屬性,也不能使用這種方法,因?yàn)橐妙?lèi)型的變量值為null就表示不存在對(duì)象,當(dāng)然就不能通過(guò)對(duì)象來(lái)訪(fǎng)問(wèn)這個(gè)屬性,否則會(huì)拋出一個(gè)異常。
可使用Value屬性來(lái)查看可空類(lèi)型的值。如果HasValue是true,就說(shuō)明Value屬性有一個(gè)非空值。但如果 HasValue是felse,就說(shuō)明變量被賦予了null,訪(fǎng)問(wèn)Value屬性會(huì)拋出System. InvalidOperationException類(lèi)型的異常。
可空類(lèi)型非常有用,以至于它們修改了C#語(yǔ)法。聲明可空類(lèi)型的變量不使用上述語(yǔ)法,而是使用下面的語(yǔ)法:
int? nullablelnt;
其中int ?是System.Nullable<int>的縮寫(xiě),但更便于讀取。
點(diǎn)擊加載更多評(píng)論>>