【问题标题】:Pass method, created with reflection, as Func parameter通过反射创建的传递方法,作为 Func 参数
【发布时间】:2010-12-25 14:15:01
【问题描述】:

我有一个方法(仅供参考,我使用的是 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 参数的值传入。关于如何实现这一点的任何线索?

【问题讨论】:

    标签: c# reflection methods func


    【解决方案1】:

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

    例如:

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

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

    【讨论】:

      【解决方案2】:

      使用调用:

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

      【讨论】:

        猜你喜欢
        • 2022-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多