2009-09-24 12 views
6

Sto provando a verificare se un tipo implementa l'interfaccia generica ICollection < T, poiché questa è un'interfaccia di base per qualsiasi mia raccolta generica.Rilevare se il tipo implementa ICollection <T>

Il codice qui sotto non funziona

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

Che cosa è un buon modo di rilevare se un tipo implementa un'interfaccia generica?

risposta

24
CustomCollection c = new CustomCollection(); 

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

Questa è la risposta corretta; L'ho provato – Graviton

1

Un'alternativa agli altri è la seguente:

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

Nota: Questo funziona solo se T è noto al momento della compilazione.

Problemi correlati