我有一个继承层次结构:
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));
如何获取完整的继承层次结构?
答案 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
类型。