2009-09-24 17 views
6

Estoy tratando de verificar si un tipo implementa la interfaz genérica ICollection < T>, ya que esta es una interfaz base para cualquiera de mis colecciones genéricas.Detectando si el tipo implementa ICollection <T>

El código siguiente no funciona

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

¿Qué es una buena manera de detectar si un tipo implementa una interfaz genérica?

Respuesta

24
CustomCollection c = new CustomCollection(); 

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

Esta es la respuesta correcta; Lo he probado – Graviton

1

Una alternativa a los otros es el siguiente:

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

Nota: Esto sólo funcionará si T se conoce en tiempo de compilación.

Cuestiones relacionadas