Quand utiliser les collections génériques
Mise à jour : novembre 2007
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, les conversions boxing des éléments sont inutiles avec les génériques.
Les types génériques suivants correspondent à des types collection existants :
Dictionary<TKey, TValue> est la classe générique qui correspond à Hashtable.
Collection<T> est la classe générique qui correspond à CollectionBase. Collection<T> peut être utilisée comme classe de base mais, à la différence de CollectionBase, elle n'est pas abstraite, ce qui la rend plus facile à utiliser.
ReadOnlyCollection<T> est la classe générique qui correspond à ReadOnlyCollectionBase. ReadOnlyCollection<T> n'est pas abstraite et possède un constructeur qui permet d'exposer facilement une classe List<T> existante en tant que collection en lecture seule.
Les classes génériques Queue<T>, Stack<T> et SortedList<TKey, TValue> correspondent aux classes non génériques du même nom.
Types supplémentaires
Plusieurs types collection génériques n'ont pas d'équivalents non génériques :
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.
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 IEnumerable ou 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.
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 SortedDictionary<TKey, TValue> et SortedList<TKey, TValue> offrent également cette fonctionnalité et permettent, en outre, 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
Vue d'ensemble des génériques dans le .NET Framework