首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

CLR 筆記:深入理解可空值類型 (Nullable)

     編輯:關於.NET

前言:System.Nullable<T> 在 FCL 中的實現

System.Nullable<T> 受限於 where T : struct,因此它本身是一個值類型。它擁有兩個唯讀屬性 HasValue 和 Value,以及 GetValueOrDefault() 方法。

18.1 C# 語法糖與類型轉換

在 C# 中,Int32? 是 Nullable<Int32> 的簡寫,使得以下寫法成為可能:

Int32? a = 5;
Int32? b = null;

允許從可空類型向非可空類型進行顯式轉換:

Int32 c = (Int32)a;

也支援可空基元類型之間的轉換:

Double? d = 5;
Double? e = b;

此外,可直接對可空類型實例使用運算符。

18.2 空合併運算符 (??)

?? 運算符用法:Int32 c = a ?? b; 表示若 a 不為 null 則返回 a,否則返回 b。

18.3 裝箱、拆箱與介面調用的特殊行為

  • 對 Nullable<T> 裝箱:要麼返回 null,要麼返回已裝箱的 T。
  • 對已裝箱的 T 拆箱:目標可以是 T 或 Nullable<T>。若為後者,CLR 會分配記憶體以容納 Nullable<T> 的 hasValue 和 Value 欄位。
  • 對 Nullable<T> 物件呼叫 GetType(),返回的類型是 T 而非 Nullable<T>。

透過可空值類型調用介面方法時,C# 會先隱式轉換為底層類型:

Int32? n = 5;
Int32 result = ((IComparable)n).CompareTo(5);

此處 n 是 Nullable<Int32>,雖然它未實作 IComparable<Int32>,但 C# 會將其隱式轉換為 Int32,後者實作了該介面,故程式碼可編譯通過。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved