c# - Use value of property expression inside expression tree -


consider property expression t => t.myproperty t of type myclass. how can use property expression inside new expression perform method call?

pure c#:

class myclass {     public string myproperty { get; set; } }  static void foo(string foo) {    }  lambdaexpression getexpression(expression<func<myclass, object>> expr) {     return expr; }  var myclass = new myclass(); foo(myclass.myproperty); 

now expressions...?

var expr = getexpression(m => m.myproperty); var mi = typeof(program).getmethod(nameof(program.foo),     bindingflags.public | bindingflags.static);  var myclass = new myclass(); // what?? // var call = expression.call(mi, ???expr??); // var invoke = expression.invoke(call, fooparameter); 

i want use result of expr , use in call foo. know can in 2 steps, call expr.compile().dynamicinvoke(myclass) value, not i'm asking here.

i want build expression takes property getter expression , performs call foo(result of expression). cannot figure out how use expression parameter method call.

there's 2 ways of doing this, depending on complexity. in case, can re-use parameter inner expression - bubbling outwards; discarding our old lambda, using .body , .parameters. example:

var call = expression.lambda<action<myclass>>(     expression.call(mi, expr.body), expr.parameters);  var myclass = new myclass { myproperty = "yay!" }; call.compile().invoke(myclass); 

the other way use invoke on inner lambda:

var outerparameter = expression.parameter(typeof(myclass)); var typed = expression.convert(expression.invoke(expr, outerparameter), typeof(string)); var call = expression.lambda<action<myclass>>(expression.call(mi, typed), outerparameter); 

the second form (invoke) useful when can't conveniently control parameters in 2 places - or where, example, have multiple inner expressions different parameter instances.


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -