在.NET中使用反射调用泛型方法

在.NET中使用反射调用泛型方法,.net,generics,reflection,.net,Generics,Reflection,我有个问题。可以在.NET中使用反射调用泛型方法吗? 我尝试了以下代码 var service = new ServiceClass(); Type serviceType = service.GetType(); MethodInfo method = serviceType.GetMethod("Method1", new Type[]{}); method.MakeGenericMethod(typeof(SomeClass)); var result = method.Invoke(se

我有个问题。可以在.NET中使用反射调用泛型方法吗? 我尝试了以下代码

var service = new ServiceClass();
Type serviceType = service.GetType();
MethodInfo method = serviceType.GetMethod("Method1", new Type[]{});
method.MakeGenericMethod(typeof(SomeClass));
var result = method.Invoke(service, null);

但是它抛出以下异常“不能对ContainsGenericParameters为true的类型或方法执行后期绑定操作。”

您没有使用
MakeGenericMethod
-的结果,这不会更改您调用它的方法;它返回另一个表示构造方法的对象。您应该有如下内容:

method = method.MakeGenericMethod(typeof(SomeClass));
var result = method.Invoke(service, null);
(当然,也可以使用不同的变量)。

你需要说

method = method.MakeGenericMethod(typeof(SomeClass));
在最短时间内,最好

var constructedMethod = method.MakeGenericMethod(typeof(SomeClass));
constructedMethod.Invoke(service, null);
因为
MethodInfo
的实例是不可变的

这个概念与

string s = "Foo ";
s.Trim();
Console.WriteLine(s.Length);
string t = s.Trim();
Console.WriteLine(t.Length);
引起

4
3
在控制台上打印

顺便说一下,您的错误消息

“不能对
包含通用参数的
true
的类型或方法执行后期绑定操作”


如果你的线索是
方法
仍然包含泛型参数。

太好了!现在可以了。我相当愚蠢的错误…我也有同样的问题,没有意识到
MakeGenericMethod
是一个函数,而不是一个无效的方法,我确信这也是Hau t的问题。我只是犯了同样的错误,但这是因为我插入了行来分配MakeGenericMethod的结果,但忘记了更改调用代码以使用新的返回值。第一次谷歌点击:)我爱你@kuldeep:您应该对代码进行基准测试,以了解影响。如果我对你的系统没有太多的了解,就对其影响做出预测,那将是愚蠢的。