FluentValidation - 仅当NOT NULL时,检查值才是日期

Gre*_*inn 11 datetime fluentvalidation

我有一个bool以及一个可以为null的DateTime属性.仅当bool设置为true时才需要DateTime ...如果bool为true,我想验证日期.

到目前为止我有这个表达...

When(p => p.HasVisa == true, () => RuleFor(p => p.VisaExpiryDate).NotNull());
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用.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;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

小智 20

只需添加'When'来检查对象是否为null:

RuleFor(x => x.AlternateNumber)
    .Must(IsAllDigits)
    .When(x => !string.IsNullOrEmpty(x.AlternateNumber))
    .WithMessage("AlternateNumber should contain only digits");
Run Code Online (Sandbox Code Playgroud)


Gre*_*inn 3

正如 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;
}
Run Code Online (Sandbox Code Playgroud)