我有一个包含泛型类型的类:
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??
答案 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;
}