最后,我已经能够通过反射,Func<T, TResult>
类型的成员,现在,我该如何调用它?
当我检索它时,我通过 Type.GetMembers 方法执行此操作,并返回成员信息类型,该类型没有调用方法;我怎么能调用它?
再次提醒大家,先谢谢! =)
答案 0 :(得分:5)
获得Func<T, TResult>
的实例后,您可以将其转换为Delegate
,并在其上调用DynamicInvoke
方法,以便您在反射中调用代理场景(只要参数类型匹配!)
答案 1 :(得分:3)
为了获得方法的委托,您需要调用传递泛型类型参数的MakeGenericMethod
- 这将返回一个可调用的委托:
var constructedMethod
= yourMethodInfo.MakeGenericMethod(typeof(int), typeof(string));
constructedMethod.Invoke(yourInstance, yourArguments);
如果您感到好奇,那么您需要执行此操作的原因是因为您当前持有的MethodInfo
实例是 open ,这意味着没有绑定泛型类型参数(和自然这个方法无法调用,这就是为什么没有Invoke
方法可用的原因。通过调用MakeGenericMethod
,您将使用泛型类型参数显式构造方法。
供参考 - MakeGenericMethod
:
[返回]表示的MethodInfo对象 由...构成的构造方法 代替。的元素 type参数的typeArguments 目前的通用方法 定义
答案 2 :(得分:1)
当我检索它时,我通过 Type.GetMembers 方法执行此操作,并返回成员信息类型,该类型没有调用方法;我怎么能调用它?
将对象强制转换为类型MethodInfo
- 这确实有一个Invoke方法。
或者,如果这是一个字段或属性,则必须使用反射获取该值,然后将其转换为适当的委托类型,然后可以调用该类型。