如何获取继承的泛型类型

时间:2014-08-29 16:53:28

标签: c# reflection

我有这些课程:

public abstract class BaseClass{}
public class CustomerService : BaseClass<Customer>{}
public class ProductService : BaseClass<Product>{}
public class UserService : BaseClass<User>{}

在运行时我有这种类型:entity.GetType(),它将返回泛型类型:Customer例如。

如果我在运行时输入CustomerService,如何获得Customer的类型? 它们都在同一名称空间中 感谢

1 个答案:

答案 0 :(得分:3)

如果您只是在寻找直接基类型为相关BaseClass<T>的类,则可以使用以下代码:

var targetBaseType = typeof(BaseClass<>).MakeGenericType(entityType);
var type = typeof(BaseClass<>).Assembly.GetTypes()
                              .Single(t => t.BaseType == targetBaseType);

为避免每次都进行线性搜索,您可能需要创建一个Dictionary<Type, Type>,其中键是实体类型,值是服务类型。您可以使用反射进行设置,也可以手动创建。然后它真的简单:

var type = serviceTypeDictionary[entityType];
相关问题