从类型中获取类定义

本文关键字:定义 获取 类型 | 更新日期: 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);