如何检索.NET运行时生成的所有已关闭泛型类型的列表?

时间:2015-10-19 14:27:05

标签: c# .net generics reflection

根据MSDN文档,.NET运行时将根据需要基于泛型类型定义动态生成封闭类型。

https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx

是否可以检索与运行时生成的封闭类型对应的System.Type个实例的集合?

1 个答案:

答案 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>));
    }
}