我有一个bool以及一个可以为null的DateTime属性。 仅当bool设置为true时才需要DateTime ... 如果bool是真的,我想验证日期。
到目前为止我有这个表达......
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进行操作。 如何在可以为空的日期进行此类验证?
由于
答案 0 :(得分:12)
只需添加'When'来检查对象是否为null:
RuleFor(x => x.AlternateNumber)
.Must(IsAllDigits)
.When(x => !string.IsNullOrEmpty(x.AlternateNumber))
.WithMessage("AlternateNumber should contain only digits");
答案 1 :(得分:1)
为我工作:
RuleFor(user => user.DateOfBirth)
.Must(p=> !(p == DateTime.MinValue))
.WithMessage("DateTime not null");
答案 2 :(得分:0)
正如Joachim所说,我需要为BeAValidDate提供重载,同时接受null和非null日期。
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;
}