Share via


Quand utiliser les collections génériques

Il est généralement recommandé d'utiliser des collections génériques dans la mesure où vous pouvez bénéficier directement de la sécurité de type sans devoir dériver d'un type collection de base et implémenter des membres spécifiques au type. Les performances des types collection génériques sont souvent supérieures à celles des types collection non génériques correspondants (et à celles des types dérivés de types collection de base non génériques) lorsque les éléments de la collection sont des types valeur. En effet, le boxing des éléments est inutile avec les génériques.

Pour les programmes qui ciblent le .NET Framework version 4 ou version ultérieure, vous devez utiliser les classes de collection génériques dans l'espace de noms System.Collections.Concurrent lorsque plusieurs threads peuvent ajouter ou supprimer simultanément des éléments de la collection.

Les types génériques suivants correspondent à des types collection existants :

Types supplémentaires

Plusieurs types de collections génériques n'ont pas d'équivalents non génériques. Ces catégories sont les suivantes :

  • LinkedList<T> est une liste liée à usage général qui fournit des opérations de suppression et d'insertion O(1).

  • SortedDictionary<TKey, TValue> est un dictionnaire trié avec des opérations de récupération et d'insertion O(log n) et représente une alternative utile à SortedList<TKey, TValue>.

  • KeyedCollection<TKey, TItem> est une collection hybride entre une liste et un dictionnaire, qui permet de stocker des objets contenant leurs propres clés.

  • BlockingCollection<T> implémente une classe de collection avec des fonctionnalités de liaison et de blocage.

  • ConcurrentBag<T> permet une insertion et une suppression rapides d'éléments non triés.

LINQ to Objects

La fonctionnalité LINQ to Objects permet d'utiliser des requêtes LINQ pour accéder aux objets en mémoire tant que le type d'objet implémente l'interface System.Collections.IEnumerable ou System.Collections.Generic.IEnumerable<T>. Les requêtes LINQ fournissent un modèle commun pour accéder aux données, sont généralement plus concises et lisibles que les boucles foreach standard et intègrent des fonctions de filtrage, de classement et de regroupement. Les requêtes LINQ peuvent également améliorer les performances. Pour plus d'informations, consultez LINQ to Objects et Parallel LINQ (PLINQ).

Fonctionnalités supplémentaires

Certains types génériques possèdent des fonctionnalités dont les types collection non génériques sont dépourvus. Par exemple, la classe List<T>, qui correspond à la classe ArrayList non générique, possède plusieurs méthodes acceptant des délégués génériques, notamment le délégué Predicate<T> qui vous permet de spécifier des méthodes pour effectuer des recherches dans la liste, le délégué Action<T> qui représente des méthodes agissant sur chaque élément de la liste et le délégué Converter<TInput, TOutput> qui vous permet de définir des conversions entre types.

La classe List<T> vous permet de spécifier vos propres implémentations de l'interface générique IComparer<T> pour trier et effectuer une recherche dans la liste. Les classes SortedList<TKey, TValue> et SortedDictionary<TKey, TValue> possèdent également cette fonction. De plus, ces classes vous permettent de spécifier des comparateurs lors de la création de la collection. De la même façon, les classes Dictionary<TKey, TValue> et KeyedCollection<TKey, TItem> vous permettent de spécifier vos propres comparateurs d'égalité.

Voir aussi

Concepts

Génériques dans le .NET Framework

Autres ressources

Types de collections couramment utilisés