C# 泛型类型的反射子类

C# 泛型类型的反射子类,c#,generics,reflection,C#,Generics,Reflection,在以下场景中: public class A<T> { } public class B : A<AClass> { } 公共类A{} 公共B类:A{} 是否可以在不指定AClass(泛型参数)的情况下确定B是否是a的子类?例如: typeof(B).IsSubclassOf(A) 是的,但您必须自己完成层次结构: var instance = new B(); Type t = instance.GetType(); bool isA = false; whil

在以下场景中:

public class A<T> { }

public class B : A<AClass> { }
公共类A{}
公共B类:A{}
是否可以在不指定AClass(泛型参数)的情况下确定B是否是a的子类?例如:

typeof(B).IsSubclassOf(A)

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

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;
    }
}
var实例=新的B();
类型t=instance.GetType();
bool-isA=false;
while(t!=类型(对象))
{
if(t.IsGenericType&&t.GetGenericTypeDefinition()==typeof(A))
{
isA=真;
打破
}
其他的
{
t=t.BaseType;
}
}

找到了一个简单的方法:
如果(B.GetType().BaseType.Name==typeof(a).Name)
代码和问题对我来说都没有意义。该代码不会编译,因此询问反射的作用是不可能的。泛型类和从它继承的任何东西都需要隐式或显式的类型参数(即
t
)。据我所知,你不能通过子类化来解决这个问题。试图这样做根本没有意义。你能更好地解释你的目标吗?当你将
B
定义为继承自
a
,而
a
不是派生自任何其他类时,
B
怎么可能是
a
的子类呢?@EricLippert修复了代码并添加了更多信息。@Yuck谢谢注意。我修复了这个问题。Works还验证了整个继承层次结构,而不仅仅是基类型(我只考虑了基类型)。谢谢两个问题:1)这只“解决”了直接的基类场景,而不是更一般的任何基类场景;2)
Name
属性不是类型的唯一标识符。实际上,在某些情况下,甚至完全限定的
FullName
属性也不是。这不是一个有用的答案,特别是考虑到事实上这里已经有了一个正确的答案。
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;
    }
}