列出一个类的泛型超类?

时间:2018-11-12 03:38:09

标签: c# generics inheritance reflection

我有一个继承层次结构:

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 :(得分:1)

您可以检查基本类型,而不是遍历程序集中的每种类型。另外,您不需要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类型。