2013-04-10 43 views
1

我有一个包含一个通用类型的类:如何比较通用参数类型?

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

关于“剩下的问题” 。 'typeof(MyClass).IsAssignableFrom(typeof(T))'(我认为)。 – 2013-04-10 12:09:01

回答

2

你将不得不检查与反思 - 递归占“源自”:

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