【发布时间】:2011-03-17 18:45:14
【问题描述】:
我正在尝试反序列化 Generic<T> where T : struct,但是当我调用 ctor.Invoke(args); 时出现异常“无法创建实例,因为 Type.ContainsGenericParameters 为真”。
如何传递我想要的泛型类型?
【问题讨论】:
标签: c# .net generics reflection
我正在尝试反序列化 Generic<T> where T : struct,但是当我调用 ctor.Invoke(args); 时出现异常“无法创建实例,因为 Type.ContainsGenericParameters 为真”。
如何传递我想要的泛型类型?
【问题讨论】:
标签: c# .net generics reflection
Type.MakeGenericType 可能就是您要找的...
【讨论】:
您必须首先在泛型类型上使用 MakeGenericType 方法创建一个具体类型
【讨论】:
假设你有一个泛型类的Type t,它有一个无参数构造函数,以及一个类型数组,用作泛型类的类型参数:
Type t = someType;
Type[] genericTypeParameters = someArrayOfTypeParameters;
用类型数组的元素替换类型参数 当前泛型类型定义并返回一个 Type 对象 表示结果...类型
然后正常构造对象:
t = t.MakeGenericType(genericTypeParameters);
object instance = Activator.CreateInstance(t);
【讨论】: