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

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

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

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

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

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

但是,您无法声明此类型的变量,因为您不能静态地知道实际类型。

您正试图在运行时确定您的类型参数。 .Netgenerics要求在编译时知道类型参数。 在切换类型之外,真的没办法做到这一点。 您可以通过reflection获取方法的句柄并调用它,但这很难看。