C# 具有多个条件的条件验证

C# 具有多个条件的条件验证,c#,fluentvalidation,C#,Fluentvalidation,我熟悉使用When,除非,以及否则进行简单的流内验证。这对于在单个条件下进行验证非常有效 我想根据if-elseif-else语句进行验证,但我无法确定如何进行验证 我想实现 if (product == Product.A) { // Validation for Product A } else if (product == Product.B) { // Validation for Product B } else { // Fail validation for

我熟悉使用
When
除非
,以及
否则
进行简单的流内验证。这对于在单个条件下进行验证非常有效

我想根据if-elseif-else语句进行验证,但我无法确定如何进行验证

我想实现

if (product == Product.A)
{
    // Validation for Product A
}
else if (product == Product.B)
{
    // Validation for Product B
}
else
{
    // Fail validation for other products
}
如果我只想检查单个产品,例如产品a,则我当前拥有的功能有效

When(
    order => order.Product == Product.A,
    () =>
    {
    RuleFor(order => order.State)
        .Must(
            state => state == State.HI
            || state == State.AK)
        .WithMessage("Product A only valid in Hawaii and Alaska.");
    }).Otherwise(
    () =>
    {
        RuleFor(order => order.Product)
            .Equal(Product.A)
            .WithMessage("Order only available with Product A.");
    });

我想将产品A和B的多个
方法组合在一起,并有一个失败的消息“订单仅适用于产品A或B”。

我已经解决了类似的问题,将规则分解,并对其进行保护

遵循您的if-else psuedo代码:

RuleFor(order => order.State)
    .Must(state => state == State.HI || state == State.AK)
    .WithMessage("Product A only valid in Hawaii and Alaska."))
    .When(order => order.Product == Product.A);

RuleFor(order => order.State)
    .Must(state => state == State.DC || state == State.CA)
    .WithMessage("Product B only valid in Washington and California."))
    .When(order => order.Product == Product.B);

// the not Product.A or Product.B case (I'm not sure what you want here) - but this 
// demonstrates a kind of "meta" rule to be applied to the whole order
RuleFor(order => order)
    .Must(order => order.Product == Product.A || order.Product == Product.B)
    .WithName("Order")
    .WithMessage(order => $"Order must be either {Product.A} or {Product.B}");