如何确定对象是否继承自抽象泛型类

sqe*_*z3r 5 c# generics inheritance types

我有一个通用的抽象类,我派生自:

abstract class SuperClass<T>
where T : SuperDataClass

abstract class SuperDataClass
Run Code Online (Sandbox Code Playgroud)

数据类型仅限于SuperDataClass,因此每个具体数据类型都必须从SuperDataClass继承.最后我有一对SuperClass和SuperDataClass继承者,例如:

class DataClassA : SuperDataClass
class ClassA : SuperClass<DataClassA>

class DataClassB : SuperDataClass
class ClassB : SuperClass<DataClassB>
Run Code Online (Sandbox Code Playgroud)

如何在不知道可能的数据类型的情况下检查对象,例如ClassA是否从SuperClass继承?

我尝试了以下,但不起作用:

if (testObject.GetType().IsAssignableFrom(typeof(SuperClass<SuperDataClass>))) {
    Console.WriteLine("The test object inherits from SuperClass");
}
Run Code Online (Sandbox Code Playgroud)

那么if语句需要怎么样?

xan*_*tos 1

递归地

Type type2 = type; // type is your type, like typeof(ClassA)

while (type2 != null)
{
    if (type2.IsGenericType && 
        type2.GetGenericTypeDefinition() == typeof(SuperClass<>))
    {
        // found
    }

    type2 = type2.BaseType;
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果您正在寻找接口,这将不起作用!