我目前正在使用一個庫,並注意到使用我已經創建的函數(我必須在其中進行投射)時發生了一些奇怪的事情。爲什麼使用Nullable時,類型可以被分配Null?
庫已經定義如下
public DateTime? GetDate(){..}
什麼是這個點的功能?爲什麼不把它作爲一個普通的DateTime
,並返回null
正常,如果有一些錯誤獲取日期?我錯過了關於Nullable類型的重要東西嗎?
我目前正在使用一個庫,並注意到使用我已經創建的函數(我必須在其中進行投射)時發生了一些奇怪的事情。爲什麼使用Nullable時,類型可以被分配Null?
庫已經定義如下
public DateTime? GetDate(){..}
什麼是這個點的功能?爲什麼不把它作爲一個普通的DateTime
,並返回null
正常,如果有一些錯誤獲取日期?我錯過了關於Nullable類型的重要東西嗎?
因爲DateTime是一個.NET值類型。就像int和char它不能爲空
值類型不能爲空。可爲空(通常寫爲DateTime?
)可以具有空值。對於所有值類型也是如此。如果您希望變量保持有效的整數或空值,則需要聲明值類型Int32?
您不能有Nullable字符串。我提到這一點,因爲雖然字符串是引用類型,但它們在許多方面的行爲類似於值類型;我一直在嘗試聲明Nullable。 (好吧,我承認它是我的)
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'
DateTime是一個結構,從而有效的空,因爲它是值類型。但是你是對的,不能將引用類型設爲空,因爲它們可以被賦值爲空。
並非所有類型都是參考類型。例如,你不能做類似於
int x = null;
因爲int
是值類型。 DateTime
是值類型。
「爲什麼不把它設置爲正常的日期時間並返回空值」
DateTime不能爲空。
是不是DateTime的.NET結構?這意味着它是一種價值型? –
omg。是的,你的權利。我很愚蠢..有人可以關閉它或給我一個答案,告訴我我很笨。 – Earlz
是的,由於某種原因,我還沒有發現DateTime是一個值類型..我從來沒有理由將Null分配給DateTime我猜.. – Earlz