C#获取泛型类的所有运行时构造类的列表

C#获取泛型类的所有运行时构造类的列表,c#,class,generics,reflection,C#,Class,Generics,Reflection,我试图列出由泛型类创建的所有运行时构造的类。换句话说,如果我有一门课: public GenericCls<T> { public void Reset() { ... } ... } 公共通用CLS{ 公共无效重置(){…} ... } 我在不同的地方都有这样的代码: GenericCls<int> gci = new GenericCls<int>(); GenericCls<String> gcs = new Generi

我试图列出由泛型类创建的所有运行时构造的类。换句话说,如果我有一门课:

public GenericCls<T> {
    public void Reset() { ... }
    ...
}
公共通用CLS{
公共无效重置(){…}
...
}
我在不同的地方都有这样的代码:

GenericCls<int> gci = new GenericCls<int>();
GenericCls<String> gcs = new GenericCls<String>();
GenericCls<float> gcf = new GenericCls<float>();
...
GenericCls gci=new GenericCls();
GenericCls gcs=新的GenericCls();
GenericCls gcf=新的GenericCls();
...
我能买点这样的吗

Type[] allconstructed = GetAllConstructed(typeof(GenericCls<>));
Type[]allconstructed=GetAllConstructed(typeof(GenericCls));
返回
{GenericCls,GenericCls,GenericCls,…}

该用例涉及一个通用分配器,它支持任何类型的对象分配(类似于
newxxx()
,但对垃圾收集器更好)。我不想谈细节,因为这只会使问题复杂化。基本上,我不知道编译时构造的所有类,因为库是一个dll,用于单独的代码项目。因此,我需要某种形式的反思,而这种反思在互联网上似乎找不到

Assembly.getExecutionGassembly().GetExportedTypes()
只包含基本泛型类(即
typeof(GenericCls)

typeof(GenericCls).GetGenericArguments()
只返回类型“T”,它不仅是无效类型,而且完全无用


如果您只知道泛型类的类型,是否有可能找到泛型类的所有构造类?(
typeof(GenericCls);
)我不确定“constructed”是否是正确的词-我想知道当前活动的所有具体泛型派生类,或者所有将要存在的泛型派生类(不确定C#如何在幕后处理泛型构造)。

您可以使用工厂类来创建实例,这样,工厂类就可以保存所有已创建类的列表。

@David Mårtensson:你的回答给了我一个想法。我可以在任何非泛型类中创建一个静态类型列表,并在构造时注册每个构造的类(当T已知时)。 i、 e

静态公共类列表{
静态公开列表;
}
公共类泛型{
静态泛型cls(){
混凝土清单.混凝土.添加(类型(一般CLS));
}
}

我用
ConcreteList.concrete[x].GetGenericArguments()
检查了它,它开始工作了。哦,太棒了。

@Ani,你应该把它作为答案提交,IMHO。你所有未注册的帐户都已合并。请考虑将OpenID与此关联起来,或者如果您不想使用OpenID,请注册它。看看我是如何编辑您的注释的,看看如何正确地格式化代码。代码需要缩进4行<代码>
标记的工作方式与您想象的不一样。如果您让它正常工作,请确保将您的答案标记为已接受,以便其他人知道是哪个解决方案解决了问题:如果这解决了您的问题,请将其标记为正确答案。
static public class ConcreteList {
    static public List<Type> concrete;
}
public class GenericCls<T> {
    static GenericCls() {
        ConcreteList.concrete.Add(typeof(GenericCls<T>));
    }
}