I need to retrieve all enums that were loaded from a given set of Assemblies.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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 ;-)
回答2:
Here is a more functional solution:
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(t => t.IsEnum)
回答3:
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...
}
}
}
回答4:
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.
回答5:
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.