代码之家  ›  专栏  ›  技术社区  ›  sgibbons

使用类型对象作为C中泛型的类型参数#

  •  5
  • sgibbons  · 技术社区  · 16 年前

    在C 3.0/.NET 3.5中的泛型构造中,我找不到将一类类型对象(System.Type实例)用作类型参数的方法。下面是我想要做的事情的简化示例:

    public void test()
    {
        Type someType = getSomeType(); // get some System.Type object
    
        MyGeneric<someType> obj = new MyGeneric<someType>();  // won't compile
    }
    

    有什么方法可以使用 形体 对象作为泛型的类型参数?

    2 回复  |  直到 16 年前
        1
  •  17
  •   Thomas Levesque    16 年前

    您可以动态创建以下类型的实例:

    public void test()
    {
        Type someType = getSomeType(); // get some System.Type object
        Type openType = typeof(MyGeneric<>);
        Type actualType = openType.MakeGenericType(new Type[] { someType });
        object obj = Activator.CreateInstance(actualType);
    }
    

    但是你不能 声明 这种类型的变量,因为您不知道实际的静态类型。

        2
  •  9
  •   Joel Coehoorn    16 年前

    您正在尝试在运行时确定类型参数。.NET泛型要求类型参数在编译时是已知的。除了打开类型外,真的没有办法做到这一点。您可以通过反射获得方法的句柄并调用它,但这很难看。