Как получить все базовые типы в сборке?
Так что, если у меня есть экземпляр
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;