C# - 如何获得基础泛型的具体类型

时间:2015-08-29 17:14:54

标签: c# .net generics reflection

假设我有一个A类:

class A : B<C>, IA
{

}

我也有这样的方法:

Type GetConcreteB<T>() where T : IA
{
//some code here...
}

在这个方法中,我想检查T是否从任何B继承(目前我将B包装到一个接口IB中,然后执行该操作),如果是确实,返回C的具体类型。

所以,基本上我只想使用子类类型返回基类泛型类的具体类型。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:6)

使用反射,遍历类层次结构,直到找到B<T>,然后提取T

static Type GetConcreteB<T>()
    where T : IA
{
    var t = typeof(T);
    while (t != null) {
        if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(B<>))
            return t.GetGenericArguments()[0];

        t = t.BaseType;
    }

    return null;
}
相关问题