位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# 可空類(lèi)型

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

    值類(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ě),但更便于讀取。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部