c# - Call Func<> with argument of type object -


i have (for instance) func<int, int> want call usual, except parameter of type object rater int. know exact type of func , argument @ runtime, because func created using expression trees , accessed dynamic variable. (simplified) code example:

using system.linq.expressions;  namespace funcexample {     class program     {         static void main(string[] args)         {             object myfunc = createfunc(); // return                                           // func<int, int>, may return                                           // different func<> depending on                                           // arguments etc.             object result = getfromfunc(5, myfunc);         }          public static object createfunc()         {             lambdaexpression expr = expression.lambda(                 /*                  * create expression                  */                 );             return expr.compile();         }          public static object getfromfunc(object arg, object func)         {             dynamic dynfunc = func;             return dynfunc(arg); // <------- throws exception         }     } } 

how can make code convert arg integer or whatever type argument is? tried making generic method casts object type , invoking through reflection this:

public static t ast<t>(object n) {     return (t)n; } 

for getfromfunc:

methodinfo con = typeof(program).getmethod("ast").makegenericmethod(func.gettype().getgenericarguments()[0]); return dfunc(con.invoke(null, new[] { value })); 

but methodinfo.invoke returns object. ideas on how make sure argument has correct type?

you're using dynamic, why not use dynamic?

return dynfunc((dynamic)arg); 

this makes sure arg's runtime type gets used determining whether it's appropriate argument.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -