假设我有:
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>
作为直接父类(super class)(即更长的类型层次结构)。如果你不这样做,那就更简单了:
var matches = someAssembly.GetTypes().Where(t => t.BaseType == baseType);
关于c# - 具有 T 类型如何在程序集中找到所有扩展 Base<T> 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133752/