Fluent仅在值不为空时应用RuleFor

本文关键字:应用 RuleFor Fluent | 更新日期: 2023-09-27 17:58:21

继上一个问题之后,我的Transaction类中有一个名为sourcenullable char

    //source isnt required but when present must be 1 character 'I' or 'M'            
    RuleFor(transaction => transaction.source.ToString())
        .Matches("^[IM]?$")                
        .When(t => t.source.Value != null);

由于MatchesWhen对于char不可用,因此我使用.ToString()方法,但是,如果生成新的Transaction对象时,源属性为null,则应用程序将由于无法将null源转换为string而失败。

如果源不是null,有人能建议一种仅运行源验证的方法吗?我假设我编写的When表达式会执行此操作,如果源是null,则会跳过验证过程的这一部分,但它会尝试处理验证的ToString()部分,从而导致错误。

Fluent仅在值不为空时应用RuleFor

MatchesWhen可用于char数据类型。

我建议这样。。。

public class Transaction
{
    public char? source { get; set; }
}

public class CustomerValidator : AbstractValidator<Transaction>
{
    public CustomerValidator()
    {
        RuleFor(t => t.source)
            .Must(IsValidSource);
    }

    private bool IsValidSource(char? source)
    {
        if (source == 'I' || source == 'M' || source == null)
            return true;
        return false;                    
    }
}

我不知道整个上下文,但我在这里看到了一个最明显的解决方案:

RuleFor(transaction => transaction.source != null ? transaction.source.ToString() : string.Empty)
    .Matches("^[IM]?$")