1. 程式人生 > 其它 >C#可空型別

C#可空型別

可空型別的來由

舉個例子 在電子商務的程式中,如果有一個訂單已經下單了,但是還沒發貨和收穫,在描述訂單的發貨時間和收穫時間該怎麼表示?在C#中值型別是不能為null的,但是在資料庫的設計的時候是允許資料庫欄位設定為null,這樣程式就會和資料庫的設計存在衝突。為了解決這一問題C# 2.0 中還引入了可空型別,可空型別也是值型別,只是可空型別是包括null的值型別。

可空型別的核心部分是System.Nullable<T>。Nullable<T>是個泛型型別,引數T有個值型別的約束。兩個重要的屬性 HasValue和Value,HasValue指出是否含有一個真正的值,Value表示這個值。

 

Nullable<T>的裝箱和拆箱

Nullable<T>是值型別,將它轉化成引用型別的時候就要裝箱。如果沒有值裝箱為空引用,有值則裝箱為成T的已裝箱的值。

可空型別提供的語法糖

?修飾符

//它倆表示的同一個意思,int?編譯後便是System.Nullable的形式
int? i = null;
Nullable<int> t = null;

??  修飾符

int? a = null;
// 下面程式碼等價於: x=a.HasValue?a.Value:12;
int x = a ?? 12;