C# 如何根据一组规则/函数进行验证
如何最好地通过一组规则验证对象,每个规则都必须返回一个ID和一个结果类型C# 如何根据一组规则/函数进行验证,c#,validation,delegates,func,C#,Validation,Delegates,Func,如何最好地通过一组规则验证对象,每个规则都必须返回一个ID和一个结果类型 我想要一个类似于Func的集合,我可以将对象发送到其中,同时从每个Func中获得单独的结果。有一些最佳实践吗?你的问题有点宽泛,但我很快就总结了一些东西,让你有个想法: public class ObjectValidator<T> where T : class { private List<Expression<Func<T, bool>>> m_rules =
我想要一个类似于Func的集合,我可以将对象发送到其中,同时从每个Func中获得单独的结果。有一些最佳实践吗?你的问题有点宽泛,但我很快就总结了一些东西,让你有个想法:
public class ObjectValidator<T> where T : class
{
private List<Expression<Func<T, bool>>> m_rules = new List<Expression<Func<T, bool>>>();
private List<ValidationResult> m_results = new List<ValidationResult>();
public ObjectValidator<T> AddRule(Expression<Func<T, bool>> rule)
{
// Null check, blah blah
m_rules.Add(rule);
return this; // Allows for chaining multiple rules together.
}
public List<ValidationResult> Validate(T objectInstance)
{
foreach (var rule in m_rules)
{
var isValid = rule.Compile()(objectInstance);
var fieldExpression = rule.Body as BinaryExpression;
var fieldNameExpression = fieldExpression.Left as MemberExpression;
string fieldName = fieldNameExpression != null ? fieldNameExpression.Member.Name : "Object";
var result = new ValidationResult(isValid, fieldName);
m_results.Add(result);
}
return m_results;
}
}
最后要使用它,假设我们有一个名为Test
的对象,我们想验证它,它如下所示:
public class Test
{
public int Property1 { get; set; }
public string Property2 { get; set; }
}
Test instance = new Test { Property1 = 5, Property2 = "Bar" };
ObjectValidator<Test> validator = new ObjectValidator<Test>();
var results = validator.AddRule(x => x.Property1 < 10)
.AddRule(x => x.Property2 == "Foo")
.Validate(instance);
然后,您可以像这样使用验证器:
public class Test
{
public int Property1 { get; set; }
public string Property2 { get; set; }
}
Test instance = new Test { Property1 = 5, Property2 = "Bar" };
ObjectValidator<Test> validator = new ObjectValidator<Test>();
var results = validator.AddRule(x => x.Property1 < 10)
.AddRule(x => x.Property2 == "Foo")
.Validate(instance);
testinstance=newtest{Property1=5,Property2=“Bar”};
ObjectValidator validator=新的ObjectValidator();
var results=validator.AddRule(x=>x.Property1<10)
.AddRule(x=>x.Property2==“Foo”)
.验证(实例);
运行它以查看它的外观:)您显然需要进行更改以满足您的需求,但这是让您开始的事情 听起来你想要一个测试班。不是真的。我不需要测试自己的功能,而是在运行时测试数据。