Estoy tratando de determinar si un tipo de tiempo de ejecución es algún tipo de tipo de colección. Lo que tengo a continuación funciona, pero parece extraño que tenga que nombrar los tipos que creo que son tipos de colección en una matriz como la que hice.¿Cómo determinar si un tipo es un tipo de colección?
En el siguiente código, el motivo de la lógica genérica se debe a que, en mi aplicación, espero que todas las colecciones sean genéricas.
bool IsCollectionType(Type type)
{
if (!type.GetGenericArguments().Any())
return false;
Type genericTypeDefinition = type.GetGenericTypeDefinition();
var collectionTypes = new[] { typeof(IEnumerable<>), typeof(ICollection<>), typeof(IList<>), typeof(List<>) };
return collectionTypes.Any(x => x.IsAssignableFrom(genericTypeDefinition));
}
¿Cómo podría refactorizar este código para ser más inteligente o más simple?
Una cosa a tener en cuenta es que por lo general no quiere considerar 'string' como una colección de' char's, a pesar de que implementa IEnumerable ''. –
svick