2009-09-24 13 views
6

Ich versuche zu überprüfen, ob ein Typ die generische ICollection < T> -Schnittstelle implementiert, da dies eine Basisschnittstelle für jede meiner generischen Sammlungen ist.Erkennen, ob Typ implementiert ICollection <T>

Der Code unten funktioniert nicht

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

Was ist eine gute Art und Weise implementiert eine generische Schnittstelle, wenn eine Art des Erfassens?

Antwort

24
CustomCollection c = new CustomCollection(); 

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

Dies ist die richtige Antwort; Ich habe es getestet – Graviton

1

Eine Alternative zu den anderen ist die folgende:

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

Hinweis: Dies funktioniert nur, wenn T zum Zeitpunkt der Kompilierung bekannt ist.

Verwandte Themen