2009-12-16 9 views

Respuesta

10
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); 
     } 
    } 
} 

que debe hacerlo, para todos los ensamblados cargados por el actual dominio de aplicación, para obtener sólo a partir de conjuntos definidos, simplemente ajustar ;-)

+1

Parte divertida (fonéticamente): "simplemente ajuste" :) –

3

Suponiendo que ha Assembly la lista de objetos que desea comprobar:

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... 
     } 
    } 
} 
2

usted debería ser capaz de utilizar Assembly.GetTypes() para obtener todos los tipos para el montaje. Para cada tipo, puede usar la propiedad Type.IsEnum para ver si se trata de una enumeración.

3

También puede utilizar LINQ para devolver una lista de todos los tipos de enumeración de una lista de asambleas.

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 serán del tipo IEnumerable.

2

Aquí es una solución más funcional:

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