如何比较泛型参数类型

本文关键字:泛型 参数 类型 比较 何比较 | 更新日期: 2023-09-27 18:08:21

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

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??

如何比较泛型参数类型

您必须使用反射递归检查以解释"派生自":

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