Как получить все базовые типы в сборке?

Так что, если у меня есть экземпляр

System.Reflection.Assembly 

и у меня есть следующая модель:

class Person {}
class Student : Person {}
class Freshman : Student {}
class Employee : Person {}
class PersonList : ArrayList {}
class StudentList : PersonList {}

Как можно перечислить типы сборки, чтобы получить ссылку только на типы Person и PersonList?

Для ясности: я не хочу явно указывать тип Person или PersonList во время этого поиска. Person и PersonList - это просто корневой тип, определенный в рассматриваемой сборке для этого примера. Я снимаю для общего способа перечислить все корневые типы для данной сборки.

Спасибо за ваше время:)

1 ответ

Решение

Как насчет:

var rootTypes = from type in assembly.GetTypes()
                where type.IsClass && type.BaseType == typeof(object)
                select type;

? Или не в терминах LINQ:

foreach (Type type in assembly.GetTypes())
{
    if (type.IsClass && type.BaseType == typeof(object))
    {
        Console.WriteLine(type);
    }
}

РЕДАКТИРОВАТЬ: Нет, это не будет определять PersonList. Вам нужно будет прояснить определение "корень". Вы действительно имеете в виду "любой тип, базовый тип которого не находится в той же сборке"? Если так:

var rootTypes = from type in assembly.GetTypes()
                where type.IsClass && type.BaseType.Assembly != assembly
                select type;
Другие вопросы по тегам