Как узнать, есть ли у класса наследник? (C#)
Пишу курсовую работу с использованием БД. Есть многоуровневая иерархия классов радиодеталей, однако в таблицы БД я записываю только конечные типы (например, Detail --> Diode --> LightDiode (в качестве таблицы в БД используется только LightDiode)). Так вот, вопрос в том, как при получении имён классов-наследников класса Detail пропускать промежуточные классы (те, у которых есть ещё наследники). Есть ли какая-то команда для этого, или, может, стоит использовать рекурсию? Код, представленный ниже, подтягивает всех наследников, включая ненужные промежуточные типы:
public static List<string> GetTypes()
{
List<string> types = new List<string>();
Type detail = typeof(Detail);
IEnumerable<Type> childs = Assembly.GetAssembly(detail).GetTypes().Where(type => type.IsSubclassOf(detail));
foreach (Type type in childs)
{
types.Add(type.Name);
}
return types;
}
(Синим помечены промежуточные классы (те, у которых есть наследники))
Спасибо!
Ответы (1 шт):
Я не совсем понимаю, что вы хотите сделать, однако могу дать ответ на вопрос: "Как исключить из списка типов те типы, которые напрямую унаследованы не от object?".
Вы можете получить список всех типов в нужной сборке и затем проверить: является ли нужных тип производным от одного из типов сборки.
Код:
var typesToCheck = new List<Type>() { ... }; // список типов, которые нужно проверить
var assembly = Assembly.GetExecutingAssembly(); // получение текущеё сборки
var assemblyTypes = assembly.GetTypes(); // список типов, определённых в сборке
// список проверенных типов
var typesWitoutInheritor = typesToCheck
.Where(typeToCheck => assemblyTypes
.All(!assemblyType.IsSubclassOf(typeToCheck)))
.ToList();
