Próbuję określić, czy typ środowiska wykonawczego jest pewnego rodzaju typem kolekcji. To, co mam poniżej, działa, ale wydaje się dziwne, że muszę wymienić typy, które uważam za typy kolekcji w tablicy, tak jak ja to zrobiłem.Jak ustalić, czy typ jest typem kolekcji?
W poniższym kodzie powodem ogólnej logiki jest to, że w mojej aplikacji oczekuję, że wszystkie kolekcje będą ogólne.
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));
}
Jak mógłbym poprawić ten kod, aby był bardziej inteligentny lub prostszy?
Jedno pamiętać, jest to, że zwykle nie warto rozważyć 'string' jako zbiór' char's, mimo że implementuje IEnumerable ''. –
svick