【问题标题】:C# - How to get the concrete type of base genericC# - 如何获得基本泛型的具体类型
【发布时间】:2015-08-29 17:14:54
【问题描述】:
假设我有一个 A 类:
class A : B<C>, IA
{
}
而且我也有这样的方法:
Type GetConcreteB<T>() where T : IA
{
//some code here...
}
在这种方法中,我想检查T 是否继承自任何B(目前我将B 包装到接口IB 中),如果是,则返回@ 的具体类型987654328@。
所以,基本上我想只使用子类类型返回基泛型类的具体类型。有没有办法做到这一点?
【问题讨论】:
标签:
c#
.net
generics
reflection
【解决方案1】:
使用反射,遍历类层次结构,直到找到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;
}