从类型中获取类定义
本文关键字:定义 获取 类型 | 更新日期: 2023-09-27 18:13:13
我有一种情况,我希望能够将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()等的命令,允许我将结果约束为一个类,以便编译器将其接受为泛型参数?这样我就可以避免从类型到类的转换了。
——实际上有一种方法可以将类型转换为类吗?我无法从该类型或该类型的实例化对象中找到这样做的方法。
——作为最后的手段,我需要在运行时动态定义这些类来实际使其工作吗?
您正在寻找MakeGenericType
方法
var secondListType = typeof(List<>).MakeGenericType(aType);
var secondList = (List<T>)Activator.CreateInstance(secondListType);