如何比较通用参数类型?

时间:2013-04-10 11:54:16

标签: c# generics type-parameter

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

class MyClass<T>
{
}

T类型可以是任何类型,包括MyClass<AnotherType>。 是的,这有点递归,可以有像MyClass<MyClass<MyClass<T>>>这样的东西。

在某些时候,在MyClass中,我想知道TMyClass<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??

1 个答案:

答案 0 :(得分:2)

你必须用反射来检查 - 递归地考虑&#34;来自&#34;:

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;
}