如何获取C#中所有已加载类型的列表?

时间:2009-12-16 11:26:14

标签: c# .net reflection

我需要检索从给定的一组程序集中加载的所有枚举。

5 个答案:

答案 0 :(得分:15)

List<Type> list = new List<Type>();
foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies())
{
    foreach (Type t in ass.GetExportedTypes())
    {
        if (t.IsEnum)
        {
            list.Add(t);
        }
    }
}

对于当前Appdomain加载的所有程序集,只应从已定义的程序集中获取,只需调整; - )

答案 1 :(得分:4)

这是一个更实用的解决方案:

AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(a => a.GetTypes())
    .Where(t => t.IsEnum)

答案 2 :(得分:3)

假设您有要检查的Assembly个对象列表:

IEnumerable<Assembly> assemblies; // assign the assemblies you want to check here

foreach (Assembly a in assemblies) {
    foreach (Type t in assembly.GetTypes()) {
        if (t.IsEnum) {
            // found an enum! Do whatever...
        }
    }
}

答案 3 :(得分:2)

您应该可以使用Assembly.GetTypes()来获取程序集的所有类型。对于每种类型,您可以使用Type.IsEnum属性来查看它是否为枚举。

答案 4 :(得分:2)

您还可以使用LINQ从程序集列表中返回所有枚举类型的列表。

IEnumerable<Assembly> assemblies;
// give assemblies some value
var enums = from assembly in assemblies let types = assembly.GetTypes() from type in types where type.IsEnum select type;

enums的类型为IEnumerable。