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

时间:2009-09-23 16:14:57

标签: c# generics types

在C#3.0 / .NET 3.5的通用构造中,我找不到使用第一类Type对象(System.Type实例)作为Type Parameter的方法。以下是我想要做的简化示例:

public void test()
{
    Type someType = getSomeType(); // get some System.Type object

    MyGeneric<someType> obj = new MyGeneric<someType>();  // won't compile
}

有没有办法使用 someType 对象作为泛型的类型参数?

2 个答案:

答案 0 :(得分:17)

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

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);
}

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

答案 1 :(得分:9)

您正试图在运行时确定您的类型参数。 .Net泛型要求在编译时知道类型参数。在切换类型之外,实际上没有办法做到这一点。

,您可以通过反射获取方法的句柄并调用它,但这很难看。