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



假设我有一个类a:

class A : B<C>, IA
{
}

我还有一个这样的方法:

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

在这个方法中,我想检查T是否继承了任何B(目前我将B包装成做这件事的接口IB),如果是这样,返回C的具体类型。

所以,基本上我想只使用子类类型返回基泛型类的具体类型。有办法做到这一点吗?

使用反射,遍历类层次结构,直到找到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;
}

相关内容

  • 没有找到相关文章