我需要检索从给定的程序集加载的所有枚举。
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
加载的所有程序集来说应该这样做;要仅从定义的程序集中获取,只需调整;-)
这是一个更实用的解决方案:
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.IsEnum)
假设您有要检查的
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...
}
}
}
您应该能够使用
Assembly.GetTypes()
获取程序集的所有类型。对于每种类型,您可以使用 Type.IsEnum
属性来查看它是否是枚举。
您还可以使用 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。