使用反射创建的Pass方法作为Func参数

时间:2009-12-11 08:49:42

标签: c# reflection methods func

我有一个方法(fyi,我正在使用c#),接受“Func”类型的参数,让我们说它是这样定义的:

MethodAcceptingFuncParam(Func<bool> thefunction);

我已经定义了要传递的函数:

public bool DoStuff()
{
    return true;
}

我可以轻易地这样称呼:

MethodAcceptingFuncParam(() =>  { return DoStuff(); });

这应该是应有的,到目前为止一直很好。

现在,我想通过反射创建这个方法,而不是传递DoStuff()方法,并将其传递给:

Type containingType = Type.GetType("Namespace.ClassContainingDoStuff");
MethodInfo mi = containingType.GetMethod("DoStuff");

=&GT;这有效,我可以正确获取methodinfo。

但这就是我陷入困境的地方:我现在想做一些像

这样的事情
MethodAcceptingFuncParam(() => { return mi.??? });

换句话说,我想通过反射传递方法作为MethodAcceptingFuncParam方法的Func参数的值。关于如何实现这一目标的任何线索?

2 个答案:

答案 0 :(得分:11)

如果类型合适,您可以使用Delegate.CreateDelegate

例如:

var func = (Func<bool>) Delegate.CreateDelegate(typeof(Func<bool>), mi);
MethodAcceptingFuncParam(func);

请注意,如果该函数在MethodAcceptingFuncParam中执行了很多次,那么比调用mi.Invoke和投射结果要快

答案 1 :(得分:1)

使用调用:

MethodAcceptingFuncParam(() => { return (bool)mi.Invoke(null, null); })