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