我需要检查DateTime
值是否有值。
我有几个选择:
if (dateTime == default(DateTime))
或
if (dateTime == DateTime.MinValue)
或使用可空的DateTime?
if (nullableDateTime.HasValue)
我个人更喜欢第三个版本,因为它的可读性非常好。 但是在我们的数据库中,我们有一些datetime列,它们被定义为非null。 所以在某些情况下我必须选择前两个选项。
我在某处读到了使用泛型时应该使用default
关键字,但在这种情况下是不是更具可读性?当使用第二个选项时,我必须知道新的和空的DateTime实例的默认值是DateTime.MinValue,它具有我的实现细节的气味。
那么我应该使用哪个选项来使用“最佳实践”?
答案 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()在数据库中设置默认值,然后将所有空值更新为最小值或任何您喜欢的值。至少你会有一个条件