【问题标题】:C# Cannot create an instance because Type.ContainsGenericParameters is trueC# 无法创建实例,因为 Type.ContainsGenericParameters 为 true
【发布时间】:2011-03-17 18:45:14
【问题描述】:

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

如何传递我想要的泛型类型?

【问题讨论】:

    标签: c# .net generics reflection


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您必须首先在泛型类型上使用 MakeGenericType 方法创建一个具体类型

      【讨论】:

        【解决方案3】:

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

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

        致电Type.MakeGenericType(),该

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

        然后正常构造对象:

            t = t.MakeGenericType(genericTypeParameters);
        
            object instance = Activator.CreateInstance(t);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-13
          • 2021-04-12
          • 2020-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-16
          • 1970-01-01
          相关资源
          最近更新 更多