How to find all direct subclasses of a class with

2020-06-30 05:02发布

Consider the following classes hierarchy: base class A, classes B and C inherited from A and class D inherited from B.

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

I can use following code to find all subclasses of A including D:

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

But I need to find only direct subclasses of A (B and C in example) and exclude all classes not directly inherited from A (such as D). Any idea how to do that?

3条回答
我欲成王,谁敢阻挡
2楼-- · 2020-06-30 05:56

Just compare them appropriately:

var types = assembly.GetTypes().Where(t => t.BaseType == baseType);
查看更多
我欲成王,谁敢阻挡
3楼-- · 2020-06-30 05:59

For each of those types, check if

type.BaseType == typeof(A)

Or, you can put it directly inline:

var types = assembly.GetTypes().Where(t => t.BaseType == typeof(baseType));
查看更多
来,给爷笑一个
4楼-- · 2020-06-30 05:59

Use Type.BaseType for that. From the documentation:

The base type is the type from which the current type directly inherits. Object is the only type that does not have a base type, therefore null is returned as the base type of Object.

查看更多
登录 后发表回答