有T类型如何查找在汇编中扩展Base <t>的所有类?</t>

时间:2015-03-18 22:16:54

标签: c# .net .net-4.5 .net-assembly

说我有:

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

有T类型(比如int)如何查找在程序集中展开Base的所有类,并能够构造它们的新对象?

1 个答案:

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