我有一种情况,我希望能够将Type作为通用参数传递。我的问题是,一旦我使用typeof()来获取Type,我就无法弄清楚如何将其恢复为允许我将其作为泛型参数传递的形式,即使类型仍然是类输入的
下面仅仅是为了演示我的问题,我实际上并没有在已经被限制为类类型的东西上调用typeof():
public void Example<T>() where T : class
{
//This works fine.
var firstList = new List<T>();
Type aType = typeof(T);
//This resolves to true.
bool thisIsTrue = aType.IsClass;
//This does not compile?!?
var secondList = new List<aType>();
}
回答以下任何问题可能会解决我的问题:
- 是否有类似于typeof(),. GetType()等的命令,允许我将结果约束到类,因此编译器会接受它作为泛型参数?然后我可以完全避免从一个类到另一个类的问题。
- 有没有办法将类型转换为类?我无法从所述类型的类型或实例化对象中找到一种方法。
- 作为最后的手段,我是否需要在运行时动态定义这些类以实际使其工作?
答案 0 :(得分:3)
您正在寻找MakeGenericType
方法
var secondListType = typeof(List<>).MakeGenericType(aType);
var secondList = (List<T>)Activator.CreateInstance(secondListType);