2009-09-24 10 views
6

Próbuję sprawdzić, czy typ implementuje ogólny interfejs ICollection < T>, ponieważ jest to podstawowy interfejs dla dowolnej z moich ogólnych kolekcji.Wykrywanie, czy typ implementuje ICollection <T>

Poniższy kod nie działa

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

Co to dobry sposób wykrywania, jeśli typ implementuje interfejs rodzajowe?

Odpowiedz

24
CustomCollection c = new CustomCollection(); 

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

To jest poprawna odpowiedź; Testowałem to – Graviton

1

Alternatywą dla innych jest następujący:

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

Uwaga: Funkcja ta działa tylko wtedy, gdy T jest znany w czasie kompilacji.

Powiązane problemy