Ответ 1
Для каждого из этих типов убедитесь, что
type.BaseType == typeof(A)
Или вы можете поместить его прямо в строку:
var types = assembly.GetTypes().Where(t => t.BaseType == typeof(baseType));
Рассмотрим следующую иерархию классов: базовый класс A, классы B и C, наследуемые от A и класса D, унаследованные от B.
public class A {...}
public class B : A {...}
public class C : A {...}
public class D : B {...}
Я могу использовать следующий код, чтобы найти все подклассы A, включая D:
var baseType = typeof(A);
var assembly = typeof(A).Assembly;
var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
Но мне нужно найти только прямые подклассы A (B и C в примере) и исключить все классы, непосредственно не унаследованные от A (такие как D). Любая идея, как это сделать?
Для каждого из этих типов убедитесь, что
type.BaseType == typeof(A)
Или вы можете поместить его прямо в строку:
var types = assembly.GetTypes().Where(t => t.BaseType == typeof(baseType));
Используйте Type.BaseType. Из документации:
Базовый тип - это тип, из которого непосредственно наследуется текущий тип. Объект - это единственный тип, который не имеет базового типа, поэтому null является базовым типом объекта.
Просто сравните их соответствующим образом:
var types = assembly.GetTypes().Where(t => t.BaseType == baseType);