2013-10-30 47 views
3

我的C#類具有日期/時間屬性,我將使用Code First映射到SQL Server數據庫中的列。此日期絕不會事先或接近默認(日期時間)。如果我輸入屬性System.DateTime,那麼我總是可以用MyProp == default(DateTime)檢查未設置的值。Nullable DateTime與依賴默認值(DateTIme)

是否有一個令人信服的理由是否將此屬性鍵入爲(可爲空)DateTime?而不是(不可爲空)DateTime?爲什麼?

+0

有時,您沒有使用Nullable的選項。例如,它可能是序列化的問題;我傾向於將所有'DateTime?'實例轉換爲'DateTime'(null => MinValue),並在反序列化時將其轉換爲空... –

+2

存儲***錯誤的值,這意味着完全不同的*根據約定*是一種可能現在可以管理的維護危險,但可能會在6個月的時間內(或需要維護您的代碼的陌生人)咬你。另一方面,'null'是明確的。 – spender

+0

@spender好點。 – HappyNomad

回答

1

某些類型的標記值(如整數)在我看來與記錄ID相關時是有意義的。當零值是一個合法的值時(這個值也可以是負值),它就沒有多少意義了。日期總是有意義的,因此空值更像「我們不在何時」的價值。此外,我認爲它會讓我們把所有記錄放在沒有日期的地方,這個查詢看起來更乾淨。

+0

儘管'default(DateTime)'的值在一般意義上是合法的,但在更具體的情況下(像我的),現在爲時尚早。這使得查詢看起來更清晰,但它們本身並不具有令人信服的理由。我想知道是否還有其他原因和/或更實用的東西,比如表演 – HappyNomad