问题描述
我有一个包含一个通用型的类:
MyClass类< T>
{
}
的
T类可以是任何类型,包括 MyClass的< AnotherType>
。
是的,这还挺递归,可以有东西像 MyClass的< MyClass的< MyClass的< T>>>
在某些时候,里面MyClass的,我想知道,如果 T
是 MyClass的< AnyOtherType>
或从 MyClass的的<任何类型; AnyOtherType>
。 (什么并不重要AnyOtherType时,只需要知道如果T是MyClass的)。
所以,我怎么比T形与 MyClass的< ;什么>
我想通了另一件事,以避免与放慢参数的问题,是让 MyClass的< T>
继承 MyClass的
(不带参数),使比较容易
MyClass类< T> :MyClass的
但仍是问题仍然存在:
如何比较T搭配MyClass的知道,如果它是某种类型的继承MyClass的?
您必须检查与反思 - 递归到账户对于来源于:
静态布尔IsMyClass(obj对象)
{
返回OBJ ==空值 ?假:IsMyClass(obj.GetType());
}
静态布尔IsMyClass(type类型)
{
,而(A型!= NULL)
{
如果(type.IsGenericType&安培;&安培;
type.GetGenericTypeDefinition()== typeof运算(MyClass的<>))
{
返回真;
}
型= type.BaseType;
}
返回FALSE;
}
I have a class containing a generic Type:
class MyClass<T>
{
}
The T type can be any type, including MyClass<AnotherType>
.Yes, that's kinda recursive, can have things like MyClass<MyClass<MyClass<T>>>
.
At some point, inside MyClass, I want to know if T
is MyClass<AnyOtherType>
or any type derived from MyClass<AnyOtherType>
. (Doesn't matter what AnyOtherType is, just need to know if T is MyClass).
So, how do I compare T type with MyClass<anything>
?
Another thing I figured out, to avoid problems with the paramter, is to make MyClass<T>
inherit MyClass
(with no parameters), to make the comparison easier.
class MyClass<T> : MyClass
But still the question remains:
How can I compare T with MyClass to know if it's some type that inherits MyClass??
You would have to check with reflection - recursively to account for "derived from":
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;
}
这篇关于如何比较泛型参数类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!