How to find all direct subclasses of a class with .NET Reflection

.net, c#, reflection

Solution

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));

Problem

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?

Original source