假设我有一个类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;
}