1

我有一个包含泛型类型的类:

class MyClass<T>
{
}

T 类型可以是任何类型,包括MyClass<AnotherType>. 是的,这有点递归,可以有类似MyClass<MyClass<MyClass<T>>>.

在某些时候,在 MyClass 中,我想知道TisMyClass<AnyOtherType>或任何类型派生自MyClass<AnyOtherType>. (AnyOtherType 是什么无关紧要,只需要知道 T 是否为 MyClass)。

那么,如何比较 T 型与MyClass<anything>


为了避免参数出现问题,我想出的另一件事是进行MyClass<T>继承MyClass(不带参数),以使比较更容易。

class MyClass<T> : MyClass

但问题仍然存在:

How can I compare T with MyClass to know if it's some type that inherits MyClass??
4

1 回答 1

2

您将不得不检查反射 - 递归地解释“派生自”:

static bool IsMyClass(object obj)
{
    return obj == null ? false : IsMyClass(obj.GetType());
}
static bool IsMyClass(Type type)
{
    while (type != null)
    {
        if (type.IsGenericType &&
            type.GetGenericTypeDefinition() == typeof(MyClass<>))
        {
            return true;
        }
        type = type.BaseType;
    }
    return false;
}
于 2013-04-10T12:00:46.710 回答