我可以使用
之类的东西找到所有BaseClass子类var subclasses = Assembly
.GetAssembly(typeof(BaseClass))
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(BaseClass)))
现在,我如何只选择最专业的子类?也就是叶子节点,它们没有自己的子类。
答案 0 :(得分:1)
subclasses.Where(c => !subclasses.Any(c2 => c == c2.BaseType))
如果你制作一个BaseTypes的HashSet会更快。
这只能起作用,因为BaseClass
在同一个程序集中;否则,它会不正确地捕获从不同程序集中的中间类继承的中间类
更通用的解决方案是针对每个其他子类检查IsAssignableFrom
。