从Reflection调用Func <T,TResult>

Hug*_*ugo 5 c#

最后,我已经能够通过反射,类型的成员Func<T, TResult>,现在,我如何调用它?

当我检索它时,我通过Type.GetMembers方法执行它,并返回一个没有Invoke方法的MemberInfo类型; 我怎么能调用它?

人们,再次感谢!=)

the*_*oop 5

有了的实例后Func<T, TResult>,可以将其转换为Delegate,并DynamicInvoke在其上调用方法,该方法允许您在反射场景中调用委托(只要参数类型匹配!)。


And*_*are 3

为了获得方法的委托,您需要调用MakeGenericMethod传递泛型类型参数 - 这将返回一个可调用的委托:

var constructedMethod 
    = yourMethodInfo.MakeGenericMethod(typeof(int), typeof(string));
constructedMethod.Invoke(yourInstance, yourArguments);
Run Code Online (Sandbox Code Playgroud)

如果您很好奇,您需要这样做的原因是因为MethodInfo您当前持有的实例是open,这意味着没有泛型类型参数绑定到它(并且自然无法调用此方法,这就是没有Invoke可用方法的原因) 。通过调用,MakeGenericMethod您可以使用泛型类型参数显式构造该方法。

以供参考 - MakeGenericMethod

[返回] 一个 MethodInfo 对象,该对象表示通过用 typeArguments 的元素替换当前泛型方法定义的类型参数而形成的构造方法。