如果有人有使用[C#] FluentValidation的经验,并对下面的问题有任何想法,任何帮助将不胜感激.
我有2个通用列表(都带有字符串数据类型) - "名称"和"URL".它们都具有相同数量的项目,因此索引项目匹配,即名称[0]与Urls [0]相关联.
我遇到的唯一问题是验证每个列表中的空项.我需要的规则是:
如果某个项目在名称[2]中为空,则Url [2]不应为空.如果Url [2]中的项目为空,则Name [2]不应为空.如果它们都是空的那么我们不想验证,我们想忽略.
注意:我在上面的例子中使用了索引2,但它可以是任何东西
到目前为止,我有:
RuleFor(f => f.Names).Must(d => d.All(s => !String.IsNullOrEmpty(s)))
.WithMessage("Names cannot be empty.")
RuleFor(f => f.URLs).Must(urls => urls.All(s => !String.IsNullOrEmpty(s)))
.WithMessage("URLs cannot be empty.")
Run Code Online (Sandbox Code Playgroud)
这检查两个列表中没有项是空的,但是如果另一个列表中的相关项也为空(如果两者都为空,那么我们只想忽略它),我需要能够在一个列表中不验证项为空. .
有任何想法吗?
最后我用下面的代码FluentValidation检查每个列表中的项目corrosponding,非常感谢Guvante因为它是由他的伪代码启发:)
RuleFor(f => f.Names).Must((f, d) =>
{
for (int i = 0; i < d.Count; i++)
{
if ((String.IsNullOrEmpty(d[i]) &&
!String.IsNullOrEmpty(f.URLs[i])))
return false;
}
return true;
})
.WithMessage("Names cannot be empty.");
RuleFor(f => f.URLs).Must((f, u) =>
{
for (int i = 0; i < u.Count; i++)
{
if ((String.IsNullOrEmpty(u[i]) &&
!String.IsNullOrEmpty(f.Names[i])))
return false;
}
return true;
})
.WithMessage("URLs cannot be empty.");
Run Code Online (Sandbox Code Playgroud)