测试是否设置了日期时间

本文关键字:日期 时间 设置 是否 测试 | 更新日期: 2023-09-27 18:21:22

我有一个带有DateTime的对象模型。它不是一个可为空的属性,所以我无法编写if (SomeDate == null)来测试它是否已设置。如何测试是否已设置DateTime

谢谢。

测试是否设置了日期时间

您可以使用

SomeDate == default(DateTime)

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

对于 DateTime ,默认值为其MinValue,即 0001 年 1 月 1 日 00:00:00.0000000。尽管此日期在您的应用程序中自然出现的可能性很低,但最好将字段转换为 DateTime? 并检查 null,因为这会使您的意图更清晰。

if (datetime == DateTime.MinValue)
{
    //it was not set
}

你可以使 SomeDate 为空

  DateTime? SomeDate = null;
  ...
  if (SomeDate == null) {
    ...
  }

在像你描述的那样的情况下,我总是显式地将DateTime初始化为DateTime.MinValue(我不知道"默认"值是由框架保证的,还是只是变量分配的附带副作用(。 然后,在表单/数据库逻辑中,我总是测试该值以查看它是否已显式设置。

正如其他几个人所提到的,这是使用可为空的日期时间的一个很好的候选项,但必须围绕其他逻辑将其转换为常规日期时间。

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