6

我有一个方法(仅供参考,我使用的是 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");

=> 这行得通,我可以正确获取方法信息。

但这就是我卡住的地方:我现在想做类似的事情

MethodAcceptingFuncParam(() => { return mi.??? });

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

4

2 回答 2

11

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

例如:

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

请注意,如果函数在 中执行很多MethodAcceptingFuncParam次,这将比调用和转换结果快得多。mi.Invoke

于 2009-12-11T08:54:22.133 回答
1

使用调用:

MethodAcceptingFuncParam(() => { return (bool)mi.Invoke(null, null); })
于 2009-12-11T09:04:23.707 回答