如何使用.NET Reflection查找类的所有直接子类

考虑以下类层次结构:基类A,inheritance自A的类B和C以及inheritance自B的类D.

public class A {...} public class B : A {...} public class C : A {...} public class D : B {...} 

我可以使用以下代码来查找A的所有子类,包括D:

 var baseType = typeof(A); var assembly = typeof(A).Assembly; var types = assembly.GetTypes().Where(t => t.IsSubclassOf(baseType)); 

但是我只需要找到A的直接子类(例子中的B和C)并排除所有不直接从Ainheritance的类(例如D)。 知道怎么做吗?

对于每种类型,请检查是否

 type.BaseType == typeof(A) 

或者,您可以直接内联:

 var types = assembly.GetTypes().Where(t => t.BaseType == typeof(baseType)); 

使用Type.BaseType 。 从文档:

基类型是当前类型直接inheritance的类型。 Object是唯一没有基类型的类型,因此返回null作为Object的基类型。

只是恰当地比较它们:

 var types = assembly.GetTypes().Where(t => t.BaseType == baseType);