Fluent仅在值不为空时应用RuleFor
本文关键字:应用 RuleFor Fluent | 更新日期: 2023-09-27 17:58:21
继上一个问题之后,我的Transaction
类中有一个名为source
的nullable
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);
由于Matches
和When
对于char
不可用,因此我使用.ToString()
方法,但是,如果生成新的Transaction
对象时,源属性为null
,则应用程序将由于无法将null
源转换为string
而失败。
如果源不是null
,有人能建议一种仅运行源验证的方法吗?我假设我编写的When表达式会执行此操作,如果源是null
,则会跳过验证过程的这一部分,但它会尝试处理验证的ToString()
部分,从而导致错误。
Matches
和When
可用于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]?$")