C# 具有T类型如何查找扩展Base的所有类<;T>;装配中?

C# 具有T类型如何查找扩展Base的所有类<;T>;装配中?,c#,.net,.net-4.5,.net-assembly,C#,.net,.net 4.5,.net Assembly,假设我有: public class Base<T> {} public class MyBaseOne : Base<int> {} public class MyBaseTwo : Base<int> {} 公共类基类{} 公共类MyBaseOne:Base{} 公共类MyBaseTwo:Base{} 拥有T type(比如int)如何找到程序集中扩展Base的所有类并能够构造它们的新对象?您可以使用type。IsAssignableFrom: var

假设我有:

public class Base<T> {}
public class MyBaseOne : Base<int> {}
public class MyBaseTwo : Base<int> {}
公共类基类{}
公共类MyBaseOne:Base{}
公共类MyBaseTwo:Base{}

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

您可以使用
type。IsAssignableFrom

var typeArgument = typeof(int);
var baseType = typeof(Base<>).MakeGenericType(typeArgument);
var matches = someAssembly.GetTypes()
                          .Where(t => typeof(baseType).IsAssignableFrom(t));
我假设您确实希望找到可分配给
Base
但没有
Base
作为直接超类的类(即更长的类型层次结构)。如果不这样做,则更容易:

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