Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射创建的Pass方法作为Func参数_C#_Reflection_Methods_Func - Fatal编程技术网

C# 使用反射创建的Pass方法作为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

我有一个方法(仅供参考,我使用的是c#),接受类型为“Func”的参数,假设它的定义如下:

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); })