c# - Is there a way to create a delegate to get and set values for a FieldInfo? -


for properties there getgetmethod , getsetmethod can do:

getter = (func<s, t>)delegate.createdelegate(typeof(func<s, t>),                                               propertyinfo.getgetmethod()); 

and

setter = (action<s, t>)delegate.createdelegate(typeof(action<s, t>),                                                 propertyinfo.getsetmethod()); 

but how go fieldinfos?

i not looking delegates getvalue , setvalue (which means invoking reflection each time)

getter = s => (t)fieldinfo.getvalue(s); setter = (s, t) => (t)fieldinfo.setvalue(s, t); 

but if there createdelegate approach here? i mean since assignments return value, can treat assignments method? if there methodinfo handle it? in other words how pass right methodinfo of setting , getting value member field createdelegate method delegate can read , write fields directly?

getter = (func<s, t>)delegate.createdelegate(typeof(func<s, t>), fieldinfo.??); setter = (action<s, t>)delegate.createdelegate(typeof(action<s, t>), fieldinfo.??); 

i can build expression , compile it, looking simpler. in end don't mind going expression route if there no answer asked question, shown below:

var instexp = expression.parameter(typeof(s)); var fieldexp = expression.field(instexp, fieldinfo); getter = expression.lambda<func<s, t>>(fieldexp, instexp).compile(); if (!fieldinfo.isinitonly) {     var valueexp = expression.parameter(typeof(t));     setter = expression.lambda<action<s, t>>(expression.assign(fieldexp, valueexp), instexp, valueexp).compile(); } 

or after nonexistent (since have seen yet) ?

field access isn't performed via method (like getters , setters)--it's performed il instruction--so there's nothing can assign delegate. you'll have use expression route create "block" of code (effectively il) can assigned delegate.


Comments

Popular posts from this blog

node.js - Bad Request - node js ajax post -

Why does Ruby on Rails generate add a blank line to the end of a file? -

keyboard - Smiles and long press feature in Android -