How do I get a list of all loaded Types in C#?

2020-07-06 04:03发布

I need to retrieve all enums that were loaded from a given set of Assemblies.

5条回答
相关推荐>>
2楼-- · 2020-07-06 04:22

Assuming you have the list of Assembly objects you want to check:

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楼-- · 2020-07-06 04:25

Here is a more functional solution:

AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(a => a.GetTypes())
    .Where(t => t.IsEnum)
查看更多
Emotional °昔
4楼-- · 2020-07-06 04:36
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);
        }
    }
}

That should do, for all assemblies loaded by the current Appdomain, to get just from defined assemblies, just adjust ;-)

查看更多
▲ chillily
5楼-- · 2020-07-06 04:39

You should be able to use Assembly.GetTypes() to get all the types for the assembly. For each type, you can use Type.IsEnum property to see if it's an enum.

查看更多
混吃等死
6楼-- · 2020-07-06 04:40

You can also use LINQ to return a list of all enum types from a list of assemblies.

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 will be of type IEnumerable.

查看更多
登录 后发表回答