Как получить все базовые типы в сборке? - PullRequest
1 голос
/ 10 февраля 2009

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

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 Ответ

6 голосов
/ 10 февраля 2009

Как насчет:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...