我有一个带有DateTime
. 它不是一个可以为空的属性,所以我不能写if (SomeDate == null)
来测试它是否被设置。如何测试 aDateTime
是否已设置?
谢谢。
你可以使用
SomeDate == default(DateTime)
请注意,这并不完全安全。调用default
值类型将返回一个可能在您的应用程序中自然出现的值。例如,default(int)
会给0
; default(bool)
给false
.
在 的情况下DateTime
,默认值为MinValue
00:00:00.0000000,0001 年 1 月 1 日。尽管此日期在您的应用程序中自然发生的可能性很低,但最好将您的字段转换为DateTime?
并检查为 null,因为它会使您的意图更清晰。
if (datetime == DateTime.MinValue)
{
//it was not set
}
您可以使 SomeDate 可以为空:
DateTime? SomeDate = null;
...
if (SomeDate == null) {
...
}
在您描述的情况下,我总是将 DateTimes 显式初始化为 DateTime.MinValue (我不知道框架是否保证了“默认”值,或者只是变量分配的附带副作用)。然后,在表单/数据库逻辑中,我总是测试该值以查看它是否已被显式设置。
正如其他几个人提到的,这是使用可为空的 DateTime 的一个很好的候选者,但是必须围绕它来包装其他逻辑才能将其转换为常规 DateTime。
我建议使用模拟框架 - 我个人使用 Rhino.Mocks。然后,您可以为任何设置了日期时间的对象创建一个模拟对象,并直接断言使用特定值或您期望的任何值调用了属性设置器。