0

我可以找到所有属于 BaseClass 子类的类,例如

var subclasses = Assembly
   .GetAssembly(typeof(BaseClass))
   .GetTypes()
   .Where(t => t.IsSubclassOf(typeof(BaseClass)))

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

4

1 回答 1

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

如果您制作 BaseType 的 HashSet,这会更快。

这只有效,因为BaseClass它在同一个程序集中;否则,它将错误地捕获从不同程序集中的中间类继承的中间类。
更通用的解决方案是检查IsAssignableFrom所有其他子类。

于 2013-06-04T16:58:05.953 回答