2009-09-24 7 views
6

J'essaie de vérifier si un type implémente l'interface générique ICollection < T>, puisqu'il s'agit d'une interface de base pour l'une de mes collections génériques.Détecter si le type implémente ICollection <T>

Le code ci-dessous ne fonctionne pas

GetType(ICollection(Of)).IsAssignableFrom(
    objValue.GetType().GetGenericTypeDefinition()) 

Qu'est-ce qu'un bon moyen de détecter si un type implémente une interface générique?

Répondre

24
CustomCollection c = new CustomCollection(); 

bool implementICollection = c.GetType().GetInterfaces() 
          .Any(x => x.IsGenericType && 
          x.GetGenericTypeDefinition() == typeof(ICollection<>)); 
+0

C'est la bonne réponse; Je l'ai testé – Graviton

1

Une alternative aux autres est la suivante:

if (MyObject is ICollection<T>) 
    ... 

Note: Cela ne fonctionnera que si T est connu au moment de la compilation.

Questions connexes