如何检查默认的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你会有一个条件