我有一个C#类,其中包含一个日期/时间属性,我将使用Code First来映射到SQL Server数据库中的一列。 该日期永远不会早于或接近默认值(DateTime)。如果我将属性键入为System.DateTime
,那么我可以始终使用MyProp == default(DateTime)
来检查未设置的值。
是否有强制性理由将此属性键入为可空DateTime?
而不是非空DateTime
?为什么?
我有一个C#类,其中包含一个日期/时间属性,我将使用Code First来映射到SQL Server数据库中的一列。 该日期永远不会早于或接近默认值(DateTime)。如果我将属性键入为System.DateTime
,那么我可以始终使用MyProp == default(DateTime)
来检查未设置的值。
是否有强制性理由将此属性键入为可空DateTime?
而不是非空DateTime
?为什么?
在我看来,对于像整数这样的某些类型,哨兵值只有在涉及记录ID时才有意义。如果零是一个合法值(例如该值也可以为负),那么它就没有太多意义。日期总是具有意义的,因此空值更具信息性,作为“我们不知道何时”的值。此外,我认为,这使得“给我所有没有日期记录”的查询看起来更加清晰简洁。
default( DateTime )
值在一般情况下是合法的,但在更具体的情况下(比如我的情况),它太早了,不够有效。这样做可以使查询看起来更清晰,但这本身并不足够有说服力。我想知道是否存在其他原因和/或更实际的因素,例如性能。 - HappyNomad
DateTime?
实例转换为DateTime
(null => MinValue),并在反序列化时从 null 转换回来... - Lynn Crumblingnull
是明确无歧义的。 - spender