仅知道通用基类的类型时,如何查找通用基类的派生类?

我尝试使用以下方法,但无法编译:

private Type FindRepositoryType(Type entityType)
{
    var repoTypes = Assembly.GetExecutingAssembly().GetTypes()
                            .Where(t => t.BaseType != null
                                && t.BaseType.IsGenericType
                                && t.BaseType.GetGenericTypeDefinition() == typeof(BaseRepository<entityType>))
                            .ToList();
    return null;
}

var repoType = FindRepositoryType(typeof(Product));


我希望找到ProductRepository类型:

public class ProductRepository : BaseRepository<Product>
{

}

最佳答案

将您的Where子句替换为:

.Where(t => t.BaseType != null
         && t.BaseType.IsGenericType
         && t.BaseType.GetGenericTypeDefinition() == typeof (BaseRepository<>)
         && t.BaseType.GetGenericArguments().Single() == entityType)

10-02 11:10