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

时间:2013-04-16 13:46:49

标签: c# .net reflection

考虑以下类层次结构:基类A,继承自A的类B和C,继承自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)并排除所有不直接从A继承的类(例如D)。 知道怎么做吗?

3 个答案:

答案 0 :(得分:27)

对于每种类型,请检查

type.BaseType == typeof(A)

或者,你可以直接内联:

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

答案 1 :(得分:5)

使用Type.BaseType。来自文档:

  

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

答案 2 :(得分:3)

恰当地比较它们:

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