加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:10:44 所属栏目:百科 来源:网络整理
导读:我有一个方法(fyi,我正在使用c#),接受一个类型为“Func”的参数,让我们说它是这样定义的: MethodAcceptingFuncParam(Funcbool thefunction); 我已经定义了要传递的函数: public bool DoStuff(){ return true;} 我可以很容易地称之为: MethodAcceptingFunc
我有一个方法(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");

=>这工作,我可以正确获取methodinfo.

但这就是我被困的地方:我现在想做点什么

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

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

解决方法

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

例如:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读