如何检查默认的DateTime值?

我需要检查DateTime值是否有值。

我有几个select:

 if (dateTime == default(DateTime)) 

要么

 if (dateTime == DateTime.MinValue) 

或使用可空的DateTime?

 if (nullableDateTime.HasValue) 

我个人更喜欢第三个版本,因为它的可读性很好。 但在我们的数据库中,我们有一些date时间列被定义为非空。 所以在某些情况下,我必须select前两个选项。

我在某处读到了在使用generics时应该使用default关键字,但是在这种情况下它不是更易读? 当使用第二个选项时,我必须知道,一个新的和空的DateTime实例的默认值是DateTime.MinValue,它具有我的实现细节的气味。

那么我应该使用哪种选项来使用“最佳实践”?

我可能会这样做是非常明确的:

 // Or private, or maybe even public internal static readonly DateTime MagicValueForNullDateTimeInNonNullableColumns = DateTime.MinValue; 

好吧,我会让这个名字稍微罗嗦一点,但你明白我的意思。 如何初始化这个价值并不重要 – 你很清楚你想要做什么。

(当然,在任何时候都可以使用可为空的types,因为在某些情况下你不能这么做,所以我提出了这个问题。

我需要检查DateTime值是否有值。

你已经描述了需要Nullable<DateTime>的教科书情况。 我会select这个选项。

(你显然需要某种翻译层,如果你需要将值保存到一个非空的数据库列,但我会尽量保持任何“神奇”值尽可能靠近数据库,并尽量保持你的C#代码干净而惯用。)

“最好”的做法是使用可空的DateTime 。 可空值types是由于不信任“魔术”数字的原因而创build的。

这种方法最重要的是它的意图 – 在你的上下文中,“默认”date/时间意味着什么?

也许你可以使用getdate()在你的数据库中设置一个默认值,然后将所有的空值更新为最小值或任何你喜欢的。 至less你会有一个条件