根据MSDN文档,.NET运行时将根据需要基于泛型类型定义动态生成封闭类型。
https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx
是否可以检索与运行时生成的封闭类型对应的System.Type
个实例的集合?
答案 0 :(得分:2)
使用静态构造函数动态构建列表。这不是线程安全的,但是当静态构造函数在首次创建每个关闭类型后立即运行时,会发生唯一的线程争用,因此这可能不是问题,具体取决于代码的构造方式。
即。如果您对这些泛型类型的所有初始访问都发生在一个线程中,那么您无需担心。
静态构造函数为每个创建的闭合类型运行一次。创建闭合类型并运行静态构造函数时,可以将类型存储在静态非泛型列表变量中。 (您不能使用通用静态,或者每个封闭类型都有一个单独的列表)
public class MyStaticClass
{
public static List<Type> ClosedTypes = new List<Type>();
}
public class MyGenericType<T>
{
static MyGenericType()
{
MyStaticClass.ClosedTypes.Add(typeof(MyGenericType<T>));
}
}