泛型类型的反射子类

时间:2014-04-27 13:40:01

标签: c# generics reflection

在以下场景中:

public class A<T> { }

public class B : A<AClass> { }

是否可以在不指定AClass(通用参数)的情况下确定B是否是A的子类?如:

typeof(B).IsSubclassOf(A<>)

2 个答案:

答案 0 :(得分:2)

是的,但您必须自己完成层次结构:

var instance = new B();
Type t = instance.GetType();

bool isA = false;
while(t != typeof(object))
{
    if(t.IsGenericType && t.GetGenericTypeDefinition() == typeof(A<>))
    {
        isA = true;
        break;
    }
    else
    {
        t = t.BaseType;
    }
}

答案 1 :(得分:-1)

找到了一种简单的方法:if (B.GetType().BaseType.Name == typeof(A<>).Name)