【问题标题】: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&lt;T&gt;,然后提取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;
}

【讨论】:

  • 正是我想要的!非常感谢!
猜你喜欢
  • 2018-09-20
  • 2021-06-25
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多