c# - Set value of Expression<Func<T>> inside a function -


here part of complete argument validation system i've wrote validates user's given argument:

public void validate<t>(expression<func<t>> argexpr, bool justclean) t : icomparable, icomparable<t>, iconvertible, iequatable<t> {     var expressionbody = (memberexpression)argexpr.body;     var argname = expressionbody.member.name;     var value = argexpr.compile().invoke();     if(!justclean)         //check above value against invalid values , throw exception     else         //clean value , question: set member's value } 

now need set expression's member value cleaned version of given value this:

validate(() => item.itemname, true); 

as result expect item.itemname has cleaned value set inside validate method.

please notice can't return value function result, because of code flow. so, there way this?

you can generate setter expression base on expression sent function:

public static void validate<t>(expression<func<t>> argexpr, bool justclean) t : icomparable, icomparable<t>, iconvertible, iequatable<t> {     var expressionbody = (memberexpression)argexpr.body;     var argname = expressionbody.member.name;     var value = argexpr.compile().invoke();     if (!justclean)     {     }     else     {         var param = expression.parameter(typeof(t));         var setter = expression.lambda<action<t>>(             expression.assign(                 expressionbody,                 param             ),             param         ).compile();         setter(default(t)); // used default(t) example, can other t value      } } 

Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

minify - Minimizing css files -

php - How to remove letter in front of the word laravel -