var type = typeof(T);
bool isList = type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>);
Si usted no necesita una coincidencia exacta de la lista, es posible que también acaba de comprobar si typeof(IList).IsAssignableFrom(typeof(T))
, que muchas colecciones de listas como implementar.
Si quieres apoyar t igual a IList<T2>
directamente (por lo que el parámetro de tipo T es una interfaz), entonces usted necesita para comprobar que por separado (GetGenericTypeDefinition()
también podría volver typeof(IList<>)
).
Si desea admitir cualquier tipo T que herede de cualquier IList<>
, entonces tiene que ser un poco más creativo. Debe enumerar todas las interfaces, verificar si son genéricas (como se indicó anteriormente) y luego verificar si el tipo genérico de la interfaz es IList<>
. Además, dado que GetInterfaces() realiza una llamada en Type solo devuelve las interfaces de nivel superior, necesita navegar a través de todas las interfaces implementadas por cada interfaz (recursivamente), para verificarlas también. Feo, lo sé.
¿Intentó compararlo con otro tipo de objeto de lista? – krs1
Esto fallará si le pasa una instancia 'NotRealAList'. –
¿Qué * exactamente * quieres decir cuando dices "lista"? ¿Te refieres al tipo exacto 'System.Collections.Generic.List'? ¿O te refieres a algo con 0 o más elementos? ¿O cualquier tipo de colección que se pueda leer y actualizar? etc. –
stakx