[英]How to compare generic parameter types?
我有一個包含通用類型的類:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.