views:

103

answers:

4

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

+2  A: 

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...
        }
    }
}
thecoop
+2  A: 

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.

dcp
+5  A: 
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 ;-)

BeowulfOF
+2  A: 

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.

Matt Olenik