16

我有一个布尔值和一个可为空的 DateTime 属性。只有当 bool 设置为 true 时才需要 DateTime……如果 bool 为 true,我想验证日期。

我到现在都有这个表情...

When(p => p.HasVisa == true, () => RuleFor(p => p.VisaExpiryDate).NotNull());

现在我尝试使用 .Must 扩展名和我的自定义 BeAValidDate 方法验证该表达式中的日期...

When(p => p.HasVisa == true, () => RuleFor(p => p.VisaExpiryDate).NotNull().Must(BeAValidDate));

private bool BeAValidDate(DateTime date)
{
  if (date == default(DateTime))
    return false;
  return true;
}

但是 .Must 扩展名不允许我对可为空的 DateTime 进行操作。如何在可为空的日期进行此类验证?

谢谢

4

3 回答 3

26

只需添加“何时”来检查对象是否不为空:

RuleFor(x => x.AlternateNumber)
    .Must(IsAllDigits)
    .When(x => !string.IsNullOrEmpty(x.AlternateNumber))
    .WithMessage("AlternateNumber should contain only digits");
于 2016-08-25T13:15:00.053 回答
2

正如 Joachim 提到的,我需要对 BeAValidDate 进行重载,以接受空日期和非空日期。

private bool BeAValidDate(DateTime date)
{
  if (date == default(DateTime))
    return false;
  return true;
}

private bool BeAValidDate(DateTime? date)
{
  if (date == default(DateTime))
    return false;
  return true;
}
于 2013-05-25T07:15:56.160 回答
2

这对我有用:

RuleFor(user => user.DateOfBirth)
  .Must(p=> !(p == DateTime.MinValue))
  .WithMessage("DateTime not null");
于 2019-10-09T15:13:49.703 回答