我找不到在C#3.0/.NET 3.5的通用构造中使用第一类Type对象(System.Type实例)作为类型参数的方法.以下是我想要做的简化示例:
public void test()
{
Type someType = getSomeType(); // get some System.Type object
MyGeneric<someType> obj = new MyGeneric<someType>(); // won't compile
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用someType对象作为泛型的类型参数?
Tho*_*que 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);
}
Run Code Online (Sandbox Code Playgroud)
但是,您无法声明此类型的变量,因为您不能静态地知道实际类型.
您正试图在运行时确定您的类型参数..Net泛型要求在编译时知道类型参数.在切换类型之外,实际上没有办法做到这一点.您可以通过反射获取方法的句柄并调用它,但这很难看.