2013-10-30 48 views
3

我的C#类具有日期/时间属性,我将使用Code First映射到SQL Server数据库中的列。此日期绝不会事先或接近默认(日期时间)。如果我输入属性System.DateTime,那么我总是可以用MyProp == default(DateTime)检查未设置的值。Nullable DateTime与依赖默认值(DateTIme)

是否有一个令人信服的理由是否将此属性键入为(可为空)DateTime?而不是(不可为空)DateTime?为什么?

+0

有时,您没有使用Nullable的选项。例如,它可能是序列化的问题;我倾向于将所有'DateTime?'实例转换为'DateTime'(null => MinValue),并在反序列化时将其转换为空... –

+2

存储***错误的值,这意味着完全不同的*根据约定*是一种可能现在可以管理的维护危险,但可能会在6个月的时间内(或需要维护您的代码的陌生人)咬你。另一方面,'null'是明确的。 – spender

+0

@spender好点。 – HappyNomad

回答

1

某些类型的标记值(如整数)在我看来与记录ID相关时是有意义的。当零值是一个合法的值时(这个值也可以是负值),它就没有多少意义了。日期总是有意义的,因此空值更像“我们不在何时”的价值。此外,我认为它会让我们把所有记录放在没有日期的地方,这个查询看起来更干净。

+0

尽管'default(DateTime)'的值在一般意义上是合法的,但在更具体的情况下(像我的),现在为时尚早。这使得查询看起来更清晰,但它们本身并不具有令人信服的理由。我想知道是否还有其他原因和/或更实用的东西,比如表演 – HappyNomad