这是我的问题;
public class MyClass<T> { public void DoSomething(T obj) { .... } }
我做的是:
var classType = typeof(MyClass<>); Type[] classTypeArgs = { typeof(T) }; var genericClass = classType.MakeGenericType(classTypeArgs); var classInstance = Activator.CreateInstance(genericClass); var method = classType.GetMethod("DoSomething",new[]{typeof(T)}); method.Invoke(classInstance,new[]{"Hello"});
在上面的例子中,我得到的异常是:无法对ContainsGenericParameters为true的类型或方法执行后期绑定操作.
如果我尝试使方法通用,它会再次失败并出现异常:
MakeGenericMethod只能在MethodBase.IsGenericMethodDefinition为true的方法上调用.
解决方法
您正在错误的对象上调用GetMethod.使用绑定的泛型类型调用它,它应该工作.这是一个完整的样本,它可以正常工作:
using System; using System.Reflection; internal sealed class Program { private static void Main(string[] args) { Type unboundGenericType = typeof(MyClass<>); Type boundGenericType = unboundGenericType.MakeGenericType(typeof(string)); MethodInfo doSomethingMethod = boundGenericType.GetMethod("DoSomething"); object instance = Activator.CreateInstance(boundGenericType); doSomethingMethod.Invoke(instance,new object[] { "Hello" }); } private sealed class MyClass<T> { public void DoSomething(T obj) { Console.WriteLine(obj); } } }