2013-04-10 6 views
1

J'ai une classe contenant un type générique:Comment comparer les types de paramètres génériques?

class MyClass<T> 
{ 
} 

Le type T peut être de tout type, y compris MyClass<AnotherType>. Oui, c'est un peu récursif, peut avoir des choses comme MyClass<MyClass<MyClass<T>>>.

À un certain point, dans MyClass, je veux savoir si T est MyClass<AnyOtherType> ou tout type dérivé de MyClass<AnyOtherType>. (Peu importe ce que AnyOtherType est, juste besoin de savoir si T est MyClass). Alors comment comparer le type T avec MyClass<anything>?


Une autre chose que j'ai compris, pour éviter les problèmes avec le paramter, est de faire MyClass<T> Hériter MyClass (sans paramètre), pour faciliter la comparaison.

class MyClass<T> : MyClass 

Mais encore la question reste:

How can I compare T with MyClass to know if it's some type that inherits MyClass?? 
+0

En ce qui concerne "la question qui reste" . 'typeof (MyClass) .IsAssignableFrom (typeof (T))' (je pense). –

Répondre

2

vous devez vérifier avec la réflexion - récursive pour tenir compte des "dérivés de":

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