Quand utiliser les collections génériquesWhen to Use Generic Collections

L'utilisation de collections génériques est généralement recommandée, car elle permet de bénéficier immédiatement 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.Using generic collections is generally recommended, because you gain the immediate benefit of type safety without having to derive from a base collection type and implement type-specific members. Les types de collections génériques sont généralement plus performants que leurs équivalents non génériques (et mieux que les types dérivés de types de collections de base non génériques) quand les éléments de collection sont des types valeur, car grâce aux génériques, aucun boxing d'éléments n'est nécessaire.Generic collection types also generally perform better than the corresponding nongeneric collection types (and better than types that are derived from nongeneric base collection types) when the collection elements are value types, because with generics there is no need to box the elements.

Pour les programmes qui ciblent .NET Framework 4 ou version ultérieure, vous devez utiliser les classes de collections génériques dans l’espace de noms System.Collections.Concurrent quand plusieurs threads sont susceptibles d’ajouter ou de supprimer simultanément des éléments de la collection.For programs that target the .NET Framework 4 or later, you should use the generic collection classes in the System.Collections.Concurrent namespace when multiple threads might be adding or removing items from the collection concurrently.

Les types génériques suivants correspondent à des types de collections existants :The following generic types correspond to existing collection types:

Autres typesAdditional Types

Plusieurs types de collections génériques n'ont pas d'équivalents non génériques.Several generic collection types do not have nongeneric counterparts. Il s'agit notamment des types suivants :They include the following:

LINQ to ObjectsLINQ 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> .The LINQ to Objects feature enables you to use LINQ queries to access in-memory objects as long as the object type implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable<T> interface. 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.LINQ queries provide a common pattern for accessing data; are typically more concise and readable than standard foreach loops; and provide filtering, ordering and grouping capabilities. Les requêtes LINQ peuvent également améliorer les performances.LINQ queries can also improve performance. Pour plus d’informations, consultez LINQ to Objects (C#), LINQ to Objects (Visual Basic) et Parallel LINQ (PLINQ).For more information, see LINQ to Objects (C#), LINQ to Objects (Visual Basic), and Parallel LINQ (PLINQ).

Autres fonctionnalitésAdditional Functionality

Certains types génériques ont des fonctionnalités que n'ont pas les types de collections non génériques.Some of the generic types have functionality that is not found in the nongeneric collection types. 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.For example, the List<T> class, which corresponds to the nongeneric ArrayList class, has a number of methods that accept generic delegates, such as the Predicate<T> delegate that allows you to specify methods for searching the list, the Action<T> delegate that represents methods that act on each element of the list, and the Converter<TInput,TOutput> delegate that lets you define conversions between 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.The List<T> class allows you to specify your own IComparer<T> generic interface implementations for sorting and searching the list. Les classes SortedDictionary<TKey,TValue> et SortedList<TKey,TValue> possèdent également cette fonctionnalité.The SortedDictionary<TKey,TValue> and SortedList<TKey,TValue> classes also have this capability. De plus, ces classes permettent de spécifier des comparateurs au moment de la création de la collection.In addition, these classes let you specify comparers when the collection is created. De la même façon, les classes Dictionary<TKey,TValue> et KeyedCollection<TKey,TItem> permettent de spécifier vos propres comparateurs d'égalité.In similar fashion, the Dictionary<TKey,TValue> and KeyedCollection<TKey,TItem> classes let you specify your own equality comparers.

Voir aussiSee also