在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 对象作为泛型的类型参数?
答案 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泛型要求在编译时知道类型参数。在切换类型之外,实际上没有办法做到这一点。
,您可以通过反射获取方法的句柄并调用它,但这很难看。