2010-06-30 63 views

回答

119

不,可爲空是結構。正在發生的事情是,可爲空的結構有兩個值:

  1. 的數據類型(intint?DateTimeDateTime?等)的值。
  2. 一個布爾值,告訴數據類型值是否已經設置。 (HasValue是屬性。)

當您設置數據類型的值,該結構改變HasValue爲true。

What is a nullable

+4

您不能在C#中重載'='運算符。布爾標誌由隱式轉換運算符設置,而不是由賦值運算符設置。 – sepp2k 2010-06-30 12:29:07

+0

哎呀謝謝sepp2k。 – kemiller2002 2010-06-30 12:31:22

6

沒有,可空類型,其實是一個結構。運行時會智能地爲您處理空值的設置,給出參考類型的外觀,當它不是時......

+2

我想查詢'智能處理',而不是主觀的。就我個人而言,我覺得這種行爲令人困惑,並且經常令人討厭。 – nicodemus13 2012-12-17 18:03:48

24

Nullable Types (C# Programming Guide)

可空類型是System.Nullable結構的實例。

空類型表示可以分配空的值值型變量。您不能基於引用類型創建可爲空的類型。 (參考類型已經支持空值。)

因此,不,它們不是引用類型。

0

您應該不需要將引用類型設置爲可爲空的類型,因爲您可以在其位置傳遞null。

11

可爲空的類型既不是值類型也不是引用類型。它們更像值類型,但具有一些參考類型的屬性。

當然,可以設置爲空的類型爲null。此外,可爲空的類型不能滿足通用的約束條件。此外,當您將HasValue等於false的可空類型框中時,您會得到一個指針而不是一個可裝箱的可空類型(與拆箱相似的情況)。

這些屬性使可爲空的類型爲非值類型,但它們肯定不是引用類型。它們是它們自己特殊的可空值類型。