Fluent Validation - 如何确保集合计数在不为空但可以为空时大于零

Reb*_*cca 2 c# fluentvalidation

我正在努力弄清楚如何定义允许集合属性为空但不为空的规则。为集合属性提供 null 是一种有效用例,但是当提供集合时,集合需要至少有一个条目。因此:

// Valid
{
    "codes": null
}

// Invalid
{
    "codes": []
}

// Valid
{
    "codes": ["Pass"]
}
Run Code Online (Sandbox Code Playgroud)

我一直在玩,似乎找不到任何有用的东西:

public class UpdateCodesRequest
{
    public IEnumerable<string> Codes { get; set; } 
}

public class UpdateCodesRequestValidator : AbstractValidator<UpdateCodesRequest>
{
    public UpdateCodesRequestValidator()
    {
        // none of these will work if Codes is null
        RuleFor(x => x.Codes.Count()).GreaterThan(0).When(x => x != null);
        RuleFor(x => x.Codes).Must(x => x.Any()).When(x => x != null);
        RuleFor(x => x.Codes).Must(x => x != null && x.Any()).When(x => x != null);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ufu*_*arı 5

这个怎么样?

RuleFor(x => x.Codes).Must(x => x == null || x.Any());
Run Code Online (Sandbox Code Playgroud)