0

我有一个带有DateTime. 它不是一个可以为空的属性,所以我不能写if (SomeDate == null)来测试它是否被设置。如何测试 aDateTime是否已设置?

谢谢。

4

5 回答 5

6

你可以使用

SomeDate == default(DateTime)

请注意,这并不完全安全。调用default值类型将返回一个可能在您的应用程序中自然出现的值。例如,default(int)会给0; default(bool)false.

在 的情况下DateTime,默认值为MinValue00:00:00.0000000,0001 年 1 月 1 日。尽管此日期在您的应用程序中自然发生的可能性很低,但最好将您的字段转换为DateTime?并检查为 null,因为它会使您的意图更清晰。

于 2013-07-06T16:07:20.067 回答
2
if (datetime == DateTime.MinValue)
{
    //it was not set
}
于 2013-07-06T16:07:56.993 回答
2

您可以使 SomeDate 可以为

  DateTime? SomeDate = null;
  ...
  if (SomeDate == null) {
    ...
  }
于 2013-07-06T16:16:44.457 回答
0

在您描述的情况下,我总是将 DateTimes 显式初始化为 DateTime.MinValue (我不知道框架是否保证了“默认”值,或者只是变量分配的附带副作用)。然后,在表单/数据库逻辑中,我总是测试该值以查看它是否已被显式设置。

正如其他几个人提到的,这是使用可为空的 DateTime 的一个很好的候选者,但是必须围绕它来包装其他逻辑才能将其转换为常规 DateTime。

于 2013-07-06T16:30:44.133 回答
-1

我建议使用模拟框架 - 我个人使用 Rhino.Mocks。然后,您可以为任何设置了日期时间的对象创建一个模拟对象,并直接断言使用特定值或您期望的任何值调用了属性设置器。

于 2013-07-06T16:23:18.127 回答