本文介绍了使用表达式定义验证规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想创建一个通用的验证类,所以我可以这样做:
I want to create a generic validation class, so I can do something like:
Validation v = new Validation();
v.AddRequired(x => this.Name);
v.AddRange(x => x.this.Age, 5, 65);
我不确定如何编写方法定义并进行评估?
I'm unsure as to how to write the method definition and make the evaluation?
其中 AddRequired
将采用字符串
和 AddRange
将采用数字类型( int
,主要是 double
, decimal
等)
Where AddRequired
would take a string
and AddRange
would take a numeric type (int
, primarily but also double
, decimal
, etc)
推荐答案
一种方法是:
class ObjectToBeValidated {
public string Name { get; set; }
public int Age { get; set; }
}
class Validation {
private List<Expression<Func<ObjectToBeValidated, bool>>> requiredExpressions;
private List<Expression<Func<ObjectToBeValidated, bool>>> rangeExpressions;
public void AddRequired(Expression<Func<ObjectToBeValidated, string>> expression)
{
Expression<Func<ObjectToBeValidated, bool>> checkRequired = (p => !string.IsNullOrEmpty(expression.Compile().Invoke(p)));
requiredExpressions.Add(checkRequired);
}
public void AddRange(Expression<Func<ObjectToBeValidated, int>> expression, int min, int max)
{
Func<ObjectToBeValidated, int> compiledFunc = expression.Compile();
Expression<Func<ObjectToBeValidated, bool>> checkRange = (p => compiledFunc.Invoke(p) >= min && compiledFunc.Invoke(p) < max);
rangeExpressions.Add(checkRange);
}
}
这只会将您的条件存储在列表与LT; T>
的。
然后,您必须在验证
类中添加一个方法来评估表达式:
This would just store your conditions in List<T>
's.You then would have to add a method to your Validation
class to evaluate the expressions:
public bool IsValid(ObjectToBeValidated testObject)
{
return requiredExpressions.All(p => p.Compile().Invoke(testObject))
&& rangeExpressions.All(p => p.Compile().Invoke(testObject));
}
然后使用如下:
validator.AddRequired(p => p.Name);
validator.AddRange(p => p.Age, 6, 15);
var myObject = new ObjectToBeValidated();
var result = validator.IsValid(myObject);
这篇关于使用表达式定义验证规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!