可空的 DateTime 与依赖默认值(DateTime)的区别

3

我有一个C#类,其中包含一个日期/时间属性,我将使用Code First来映射到SQL Server数据库中的一列。 该日期永远不会早于或接近默认值(DateTime)。如果我将属性键入为System.DateTime,那么我可以始终使用MyProp == default(DateTime)来检查未设置的值。

是否有强制性理由将此属性键入为可空DateTime?而不是非空DateTime?为什么?


有时候,你没有使用 Nullable 的选项。例如,在序列化方面可能会出现问题;我倾向于将所有的 DateTime? 实例转换为 DateTime(null => MinValue),并在反序列化时从 null 转换回来... - Lynn Crumbling
2
存储错误的值,这个值按照约定意味着完全不同的东西,这是一个维护风险,现在可能可以管理,但在6个月后(或需要维护您代码的陌生人)可能会给你带来麻烦。另一方面,null是明确无歧义的。 - spender
我看到的原因是,如果你的业务规则强制执行三种不同的情况:用户提供的DateTime值,表示某些特殊情况的默认日期时间和由空的DateTime值表示的未初始化日期时间值。类似于一个三态复选框。 - Ikaso
1个回答

1

在我看来,对于像整数这样的某些类型,哨兵值只有在涉及记录ID时才有意义。如果零是一个合法值(例如该值也可以为负),那么它就没有太多意义。日期总是具有意义的,因此空值更具信息性,作为“我们不知道何时”的值。此外,我认为,这使得“给我所有没有日期记录”的查询看起来更加清晰简洁。


虽然default( DateTime )值在一般情况下是合法的,但在更具体的情况下(比如我的情况),它太早了,不够有效。这样做可以使查询看起来更清晰,但这本身并不足够有说服力。我想知道是否存在其他原因和/或更实际的因素,例如性能。 - HappyNomad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接