C#中的可空實值型別介紹

來源:互聯網
上載者:User
 

由於一個實值型別變數永遠不可能為null,而資料庫中的一個列是允許值為空白的,為了與資料庫中的列相對應,CLR引入了可空實值型別。

C#中是以問號標記法聲明並初始化可空實值型別的,如下代碼所示:

#001 int? x=5;

#002 int? y=null;

C#允許對可空實值型別進行資料轉換和轉型,範例程式碼如下:

#001 int? x=5;

#002 int z =(int)x;

可以對可空實值型別進行裝箱。其規則是:若可空實值型別為null,CLR不進行裝箱操作並返回null值,若不為null,則進行裝箱。範例程式碼如下:

#001 static void NullToObject()

#002 {

#003   int? b =null;

#004   Object o =b;

#005   Console.WriteLine("o is null={0}",o==null);//結果o is null=Ture

#006   b=5;

#007   o=b;

#008   Console.WriteLine("o’s type={0}",o.GetType());

#009   //結果o’s type=System.Int32

#010 }

這個樣本的中如果第一個結果o is null=True,則馬上調用o.GetType()的時候將報錯。

可以對可空實值型別進行拆箱。CLR允許將一個已裝箱的實值型別T拆箱為一個T或一個Nullable<T>,範例程式碼如下:

#001 static void ObjectToNull()

#002 {

#003   Object o =5;

#004   int? a=(int?)o;

#005   int b=(int)o;

#006   Console.WriteLine("a={0},b={1}",a,b);  //結果a=5,b=5

#007   o=null;

#008   a=(int?)o;

#009 }

如果在第八行下面添加b=(int)o;這樣就會報Null 參考異常錯誤。

通過可空實值型別來調用GetType()方法,會發現得到的結果是System.Int32類型,而不是Systems.Nullable<Int32>類型。

通過可空實值型別調用介面方法時,Nullable沒有像Int32一樣實現IComparable介面,但CLR允許下面的代碼通過編譯。

#001 static void NullUseInterface()

#002 {

#003   int? a=5;

#004   int b=((IComparable)a).CompareTo(5); //能通過編譯

#005   Console.WriteLine(b);//結果為0

#006 }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.