Dot-Net
為什麼 Nullable<T> 被視為值類型?
您是否嘗試過使用該
Convert.ChangeType()方法將值轉換為Nullable<T>類型?尷尬的是,它會拋出一個InvalidCastException說法“Null 對像不能轉換為值類型”。嘗試在您的即時視窗上執行它:
?System.Convert.ChangeType(null, typeof(int?))由於一些模糊的原因,Nullables 被認為是值類型。例如,
typeof(int?).IsValueType返回true.對我來說,因為
Nullable<T>acceptnull,它是一個類類型,而不是一個值類型。有誰知道為什麼它會以不同的方式實施?
System.Nullable<T>從技術上講,它是一種結構,因此它是一種值類型(a 的null值Nullable<T>與空引用並不完全相同。它是一個布爾標誌,表示缺少值。)但是,它由執行時特殊處理,這使得它是一種尷尬的值類型。首先,它不滿足where T : struct類型約束(它也不滿足where T : class,因為它的價值)。其次,它表現出有趣的拳擊行為。裝箱 aNullable<T>將導致:
- 參考,如果
null值為null.- 基礎類型的裝箱值(如果它實際上包含一個值)。也就是說,在語句中:
int? x = 2; object y = x;
y不是盒裝的Nullable<int>。它只是一個盒裝的int.T您可以將任何類型的裝箱值拆箱Nullable<T>(T當然還有 )。轉換對結果的null引用(如您所料)。Nullable<T>``null執行時的這種特殊處理使可空類型的工作方式更類似於
null引用類型中的工作方式。