c# - Using expressions to define validation rules -
i want create generic validation class, can like:
validation v = new validation(); v.addrequired(x => this.name); v.addrange(x => x.this.age, 5, 65); i'm unsure how write method definition , make evaluation?
where addrequired take string , addrange take numeric type (int, double, decimal, etc)
an approach be:
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); } } this store conditions in list<t>'s. have add method validation class evaluate expressions:
public bool isvalid(objecttobevalidated testobject) { return requiredexpressions.all(p => p.compile().invoke(testobject)) && rangeexpressions.all(p => p.compile().invoke(testobject)); } then use this:
validator.addrequired(p => p.name); validator.addrange(p => p.age, 6, 15); var myobject = new objecttobevalidated(); var result = validator.isvalid(myobject);
Comments
Post a Comment