2009-12-16 55 views

回答

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

这应该做的,对于当前的AppDomain加载,所有的组件刚刚从定义组件获得,只需调整;-)

+1

有趣的部分(发音):“只是调整”:) – 2014-03-04 16:28:32

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

你应该能够使用Assembly.GetTypes()让所有类型的组件。对于每种类型,您可以使用Type.IsEnum属性来查看它是否为枚举。

3

您还可以使用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类型。

2

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

AppDomain.CurrentDomain.GetAssemblies() 
    .SelectMany(a => a.GetTypes()) 
    .Where(t => t.IsEnum) 
相关问题