给定基类如何找到它最专业的子类?

时间:2013-06-04 16:56:27

标签: c# linq inheritance subclass

我可以使用

之类的东西找到所有BaseClass子类
var subclasses = Assembly
   .GetAssembly(typeof(BaseClass))
   .GetTypes()
   .Where(t => t.IsSubclassOf(typeof(BaseClass)))

现在,我如何只选择最专业的子类?也就是叶子节点,它们没有自己的子类。

1 个答案:

答案 0 :(得分:1)

subclasses.Where(c => !subclasses.Any(c2 => c == c2.BaseType))

如果你制作一个BaseTypes的HashSet会更快。

这只能起作用,因为BaseClass在同一个程序集中;否则,它会不正确地捕获从不同程序集中的中间类继承的中间类 更通用的解决方案是针对每个其他子类检查IsAssignableFrom