我需要一个验证器类来运行一系列验证方法,每个验证方法都返回一个错误代码。根据错误的严重程度,我可能想中止其余的验证。我可以在每次调用后检查返回的错误代码,而不执行剩余的验证,但这会给主要的“驾驶”例程增加很多重复的混乱。
所以,我编写了以下帮助程序来为我处理这个......
public IList<Error> ValidateSet(InputType input,
params Func<InputType, IList<Error>>[] validations)
{
var errors = new List<Error>();
foreach (var validation in validations)
{
errors.AddRange(validation(input));
if (AbortValidations(errors))
break;
}
return errors;
}
这按以下方式调用,效果很好......
var errors = new List<Error>();
errors.AddRange(
ValidateSet(input,
ValidateX,
ValidateY,
ValidateZ)
);
我现在遇到的问题是,某些验证需要除 InputType 的一个参数之外的其他参数。
有什么办法可以保持同样有用的结构吗?请注意,我不能简单地传递每个验证的结果,因为如果较早的验证返回“中止”错误代码(验证加载数据,因此这是性能要求),我不想运行剩余的验证。
谢谢,约翰