反射成员信息到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<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 表达式很少使用委托。