C# - 如何获取基本泛型的具体类型

标签 c# .net generics reflection

假设我有一个 A 类:

class A : B<C>, IA
{

}

我也有这样的方法:

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

在这个方法中,我想检查 T 是否继承自任何 B(目前我将 B 包装到接口(interface) 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;
}

关于C# - 如何获取基本泛型的具体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288716/

相关文章:

c# - 将 UserControl 添加到 C# 中的变量位置

c# - 如何使用动态扩展 c# 4.0 中的现有对象

c# - ExecuteNonQuery C# 和 SQL Server

.net - 如何判断 .PFX 文件是否需要密码

scala - Scala 中的方法泛化

c# - 调用不被调用

.net - Windows Azure 基于消息的体系结构

c# - 当我在组合框中选择一种语言时,如何更改所有表单的文本?

c# - IUnityContainer.Resolve<T> 抛出错误,声称它不能与类型参数一起使用

c# - 我可以在需要泛型类型的地方传递非泛型类型吗?