反射成员信息到Func

本文关键字:T1 T2 Func 成员 员信息 反射 | 更新日期: 2023-09-27 18:25:37

我正在寻找一种将MemberInfo实例转换为"Func"类型的方法(稍后通过lambda表达式使用它(。

假设我有一个类型的成员函数

public bool func(int);

使用反射,我以某种方式获得了MemberInfo"mi"的实例,现在我想将其转换为Func<int, bool>;类型。 像这样:

Func<int, bool f = myType.GetMember(mi.Name);

有没有办法做到这一点?

马克·格拉威尔的回答解决了我的问题,无需进一步评论

反射成员信息到Func<T1,T2>

Func<int,bool> f = (Func<int,bool>)Delegate.CreateDelegate(
           typeof(Func<int,bool>), target, (MethodInfo)mi);

或在最近的框架上:

var f = mi.CreateDelegate<Func<int,bool>>(target);

请注意,target是要使用的对象,因为func是非static方法。如果是static方法,则可以省略(或传递null(。或者,您可以省略target(或传递null(,如果将其设置为Func<Foo, int, bool>,其中Foo是声明func的类型。

然而!!!请注意,就创建 lambda 表达式而言,拥有 Func<int,bool> 在很大程度上毫无意义;lambda 表达式很少使用委托