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