如何检查默认的DateTime值?

时间:2013-04-29 14:46:47

标签: c# .net design-patterns

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

我有几个选择:

if (dateTime == default(DateTime))

if (dateTime == DateTime.MinValue)

或使用可空的DateTime?

if (nullableDateTime.HasValue)

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

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

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

4 个答案:

答案 0 :(得分:50)

我可能会明确地说明这一点:

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

好的,所以我的名字稍微不那么罗嗦了,但你明白我的意思。如何初始化该值并不重要 - 很清楚你要做的是什么。

(当然,在任何时候都可以使用可空类型。我假设问题被问到,因为你在某些情况下不能这样做。)

答案 1 :(得分:16)

  

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

您已经非常详细地描述了需要Nullable<DateTime>的教科书情况。我会选择那个。

(如果你需要将值保存到非空的db列,你显然需要某种转换层,但我会尽量保持任何“魔法”值尽可能接近db,并且尽量保持你的C#代码清洁和惯用。)

答案 2 :(得分:6)

“最佳”做法是使用可空的DateTime。由于不信任“魔法”数字的原因,完全创建了可以为空的值类型。

这种方法最重要的是它的意图 - 在你的上下文中意味着什么具有“默认”日期/时间?

答案 3 :(得分:0)

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