Список общих суперклассов класса? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть иерархия наследования:

public interface IValidator<TItem>

public abstract class Validator<TItem, TId> : IValidator<IItem>

public class MyValidator : Validator<MyItem, int>

Я хочу найти каждый интерфейс и суперкласс MyValidator. Я могу сделать интерфейсы легко с

return validator.GetType().GetInterfaces();

Но когда я пытаюсь сделать то же самое для суперклассов, все, что я получаю, это System.Object, а не Validator<MyItem, int>.

var type = validator.GetType();
return AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(a => a.GetTypes())
    .Where(supertype => type.IsSubclassOf(supertype));

Как получить полную иерархию наследования?

1 Ответ

0 голосов
/ 12 ноября 2018

Вместо того, чтобы перебирать каждый тип в вашей сборке, вы можете проверить базовые типы.Кроме того, вам не нужен экземпляр MyValidator, чтобы получить MyValidator тип.Проверьте этот код:

var baseType = typeof(MyValidator).BaseType;
var baseTypes = new List<Type> { baseType };

while(baseType != typeof(object))
    baseTypes.Add(baseType = baseType.BaseType);

Теперь baseTypes список содержит Validator<MyItem, int> и object типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...