Как получить список всех загруженных типов в C #? - PullRequest
10 голосов
/ 16 декабря 2009

Мне нужно получить все перечисления, которые были загружены из данного набора сборок.

Ответы [ 5 ]

15 голосов
/ 16 декабря 2009
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, чтобы получить только из определенных сборок, просто настроить; -)

4 голосов
/ 16 мая 2012

Вот более функциональное решение:

AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(a => a.GetTypes())
    .Where(t => t.IsEnum)
3 голосов
/ 16 декабря 2009

Если у вас есть список 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 голосов
/ 16 декабря 2009

Вы также можете использовать 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 голосов
/ 16 декабря 2009

Вы должны быть в состоянии использовать Assembly.GetTypes(), чтобы получить все типы для сборки. Для каждого типа вы можете использовать свойство Type.IsEnum, чтобы увидеть, является ли оно перечислением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...