Comment faire pour déterminer si un type est un type de collection?

Je suis en train d'essayer de déterminer si un runtime type est une sorte de type de collection. Ce que j'ai ci-dessous fonctionne, mais il semble étrange que j'ai pour nom les types que je crois être les types de collection dans un tableau comme je l'ai fait.

Dans le code ci-dessous, la raison pour le générique de la logique en est que, dans mon application, je m'attends à toutes les collections génériques.

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));
}

Comment aurais-je refactoriser ce code pour être plus intelligent ou plus simple?

  • Une chose à garder à l'esprit est que vous n'avez généralement pas envisager de string comme une collection de chars, même si elle met en œuvre IEnumerable<char>.