如何比较泛型参数类型
本文关键字:泛型 参数 类型 比较 何比较 | 更新日期: 2023-09-27 18:08:21
我有一个包含泛型Type的类:
class MyClass<T>
{
}
T可以是任意类型,包括MyClass<AnotherType>
。是的,这有点递归,可以有像MyClass<MyClass<MyClass<T>>>
这样的东西。
在MyClass中,我想知道T
是MyClass<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;
}