2010-03-02 40 views
0

我目前正在使用一個庫,並注意到使用我已經創建的函數(我必須在其中進行投射)時發生了一些奇怪的事情。爲什麼使用Nullable時,類型可以被分配Null?

庫已經定義如下

public DateTime? GetDate(){..} 

什麼是這個點的功能?爲什麼不把它作爲一個普通的DateTime,並返回null正常,如果有一些錯誤獲取日期?我錯過了關於Nullable類型的重要東西嗎?

+5

是不是DateTime的.NET結構?這意味着它是一種價值型? –

+1

omg。是的,你的權利。我很愚蠢..有人可以關閉它或給我一個答案,告訴我我很笨。 – Earlz

+0

是的,由於某種原因,我還沒有發現DateTime是一個值類型..我從來沒有理由將Null分配給DateTime我猜.. – Earlz

回答

10

因爲DateTime是一個.NET值類型。就像int和char它不能爲空

0

值類型不能爲空。可爲空(通常寫爲DateTime?)可以具有空值。對於所有值類型也是如此。如果您希望變量保持有效的整數或空值,則需要聲明值類型Int32?

您不能有Nullable字符串。我提到這一點,因爲雖然字符串是引用類型,但它們在許多方面的行爲類似於值類型;我一直在嘗試聲明Nullable。 (好吧,我承認它是我的)

1

DateTime是一個值類型。它不能具有分配給它的空值。

編輯:如果您嘗試使用?在引用類型運營商,您會收到以下錯誤:

The type 'object' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'

0

DateTime是一個結構,從而有效的空,因爲它是值類型。但是你是對的,不能將引用類型設爲空,因爲它們可以被賦值爲空。

0

並非所有類型都是參考類型。例如,你不能做類似於

int x = null; 

因爲int是值類型。 DateTime是值類型。

0

「爲什麼不把它設置爲正常的日期時間並返回空值」

DateTime不能爲空。

相關問題