Quand utiliser les collections génériques

L’utilisation de collections génériques vous offre l’avantage automatique de la cohérence des types sans avoir à dériver d’un type de collection de base et à implémenter des membres spécifiques au type. Les types de collections génériques sont généralement plus performants que les types de collections non génériques correspondants (et mieux que les types dérivés de types de collections de base non génériques) quand les éléments de la collection sont des types valeur, car avec les génériques, il n’est pas nécessaire de définir un cadre pour les éléments.

Pour les programmes qui ciblent .NET Standard 1,0 ou une version ultérieure, utilisez les classes de collection génériques dans l' System.Collections.Concurrent espace de noms lorsque plusieurs threads peuvent ajouter ou supprimer simultanément des éléments de la collection. En outre, lorsque l’immuabilité est souhaitée, tenez compte des classes de collection génériques dans l' System.Collections.Immutable espace de noms.

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

Autres types

Plusieurs types de collections génériques n'ont pas d'équivalents non génériques. Il s'agit des dossiers suivants :

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

  • SortedDictionary<TKey,TValue> est un dictionnaire trié avec des opérations d'insertion et d'extraction O(log n), ce qui en fait une alternative pratique à SortedList<TKey,TValue>.

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

  • BlockingCollection<T> implémente une classe de collection avec une fonctionnalité d'englobement et de blocage.

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

Générateurs immuables

Quand vous souhaitez une fonctionnalité d’immuabilité dans votre application, l' System.Collections.Immutable espace de noms offre des types de collections génériques que vous pouvez utiliser. Tous les types de collections immuables offrent des Builder classes qui peuvent optimiser les performances lorsque vous effectuez plusieurs mutations. La Builder classe traite les opérations dans un État mutable. Une fois toutes les mutations terminées, appelez la ToImmutable méthode pour « figer » tous les nœuds et créer une collection générique immuable, par exemple, ImmutableList<T> .

L' Builder objet peut être créé en appelant la méthode non générique CreateBuilder() . À partir d’une Builder instance, vous pouvez appeler ToImmutable() . De même, à partir de la Immutable* collection, vous pouvez appeler ToBuilder() pour créer une instance de générateur à partir de la collection immuable générique. Les différents types sont les suivants Builder .

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 standard, foreach et fournissent des fonctionnalités 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 (C#), LINQ to Objects (Visual Basic) et Parallel LINQ (PLINQ).

Autres fonctionnalités

Certains types génériques ont des fonctionnalités que n'ont pas les types de collections non génériques. Par exemple, la classe List<T> , qui correspond à la classe non générique ArrayList , possède plusieurs méthodes acceptant des délégués génériques, telles que le délégué Predicate<T> qui 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 qui agissent sur chaque élément de la liste, et le délégué Converter<TInput,TOutput> qui permet de définir des conversions de types.

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

Voir aussi