C# 使用反射创建的Pass方法作为Func参数
我有一个方法(仅供参考,我使用的是c#),接受类型为“Func”的参数,假设它的定义如下:C# 使用反射创建的Pass方法作为Func参数,c#,reflection,methods,func,C#,Reflection,Methods,Func,我有一个方法(仅供参考,我使用的是c#),接受类型为“Func”的参数,假设它的定义如下: MethodAcceptingFuncParam(Func<bool> thefunction); 我可以很容易地称之为: MethodAcceptingFuncParam(() => { return DoStuff(); }); 到目前为止,这一切正常 现在,我不想传入DoStuff()方法,而是想通过反射创建此方法,并传入: Type containingType = Typ
MethodAcceptingFuncParam(Func<bool> thefunction);
我可以很容易地称之为:
MethodAcceptingFuncParam(() => { return DoStuff(); });
到目前为止,这一切正常
现在,我不想传入DoStuff()方法,而是想通过反射创建此方法,并传入:
Type containingType = Type.GetType("Namespace.ClassContainingDoStuff");
MethodInfo mi = containingType.GetMethod("DoStuff");
=>这很有效,我可以正确获取methodinfo
但这正是我被困的地方:我现在想做一些类似的事情
MethodAcceptingFuncParam(() => { return mi.??? });
换句话说,我想传入我刚刚通过反射得到的方法,作为MethodAcceptingFuncParam方法的Func参数的值。关于如何实现这一点的任何线索?如果类型合适,您可以使用
例如:
var func = (Func<bool>) Delegate.CreateDelegate(typeof(Func<bool>), mi);
MethodAcceptingFuncParam(func);
var func=(func)Delegate.CreateDelegate(typeof(func),mi);
方法接受funcParam(func);
请注意,如果函数在MethodAcceptingFuncParam
中大量执行,这将比调用mi.Invoke
并强制转换结果快得多。使用Invoke:
MethodAcceptingFuncParam(() => { return (bool)mi.Invoke(null, null); })
MethodAcceptingFuncParam(() => { return (bool)mi.Invoke(null, null); })