有 T 类型如何在程序集中找到扩展 Base<T> 的所有 类?

Having T type how to find all classes that expand Base<T> in assembly?

假设我有:

public class Base<T> {}
public class MyBaseOne : Base<int> {}
public class MyBaseTwo : Base<int> {}

具有 T 类型(例如 int)如何找到所有 类 在程序集中扩展 Base 并能够构造它们的新对象?

您可以使用 Type.IsAssignableFrom:

var typeArgument = typeof(int);
var baseType = typeof(Base<>).MakeGenericType(typeArgument);
var matches = someAssembly.GetTypes()
                          .Where(t => typeof(baseType).IsAssignableFrom(t));

这将适用于您展示的示例,但不会找到(例如)Child<T>,其中 Child 被描述为:

public class Child<T> : Base<T>

我假设您 想要找到可分配给 Base<T> 但没有 Base<T> 作为直接超类(即更长的类型层次结构)。如果你不这样做,那就更简单了:

var matches = someAssembly.GetTypes().Where(t => t.BaseType == baseType);