说我有:
public class Base<T> {}
public class MyBaseOne : Base<int> {}
public class MyBaseTwo : Base<int> {}
有T类型(比如int)如何查找在程序集中展开Base的所有类,并能够构造它们的新对象?
答案 0 :(得分:3)
您可以使用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);