C#无法创建实例,因为Type.ContainsGenericParameters为true

时间:2011-03-17 18:45:14

标签: c# .net generics reflection

我正在尝试反序列化Generic<T> where T : struct但是当我调用ctor.Invoke(args);时,我得到异常“无法创建实例,因为Type.ContainsGenericParameters为true”。

如何传递我想要的通用类型?

3 个答案:

答案 0 :(得分:11)

Type.MakeGenericType可能就是你要找的......

答案 1 :(得分:3)

您必须首先使用泛型类型

上的MakeGenericType方法创建具体类型

答案 2 :(得分:2)

假设你有一个Type t泛型类,它有一个无参数构造函数,以及一个类型数组,用作泛型类的类型参数:

Type t = someType;
Type[] genericTypeParameters = someArrayOfTypeParameters;

致电Type.MakeGenericType()

  

替换类型参数的类型数组的元素   当前泛型类型定义并返回一个Type对象   代表结果......类型

然后正常构造对象:

    t = t.MakeGenericType(genericTypeParameters);

    object instance = Activator.CreateInstance(t);