Sélection d'une classe de collection
Mise à jour : novembre 2007
Veillez à choisir votre classe System.Collections avec beaucoup de soin. Le choix d'une collection erronée peut limiter l'usage que vous pouvez en faire.
Réfléchissez aux questions suivantes :
Avez-vous besoin d'une liste séquentielle dans laquelle l'élément est généralement abandonné une fois sa valeur récupérée ?
Si oui, vous devez envisager d'utiliser la classe Queue ou la classe générique Queue<T> si vous avez besoin d'un comportement de premier entré premier sorti (FIFO). Vous devez envisager d'utiliser la classe Stack ou la classe générique Stack<T> si vous avez besoin d'un comportement de dernier entré premier sorti (LIFO).
Sinon, vous devez envisager d'utiliser les autres collections.
Devez-vous accéder aux éléments dans un ordre précis, tel que FIFO, LIFO ou dans un ordre aléatoire ?
La classe Queue et la classe générique Queue<T> proposent un accès FIFO.
La classe Stack et la classe générique Stack<T> proposent un accès LIFO.
La classe générique LinkedList<T> autorise un accès séquentiel à partir du début ou de la fin.
Les autres collections offrent un accès aléatoire.
Avez-vous besoin d'accéder à chaque élément par son index ?
Les classes ArrayList et StringCollection et la classe générique List<T> offrent l'accès à leurs éléments par l'index de base zéro de l'élément.
Les classes Hashtable, SortedList, ListDictionary et StringDictionary, et les classes génériques Dictionary<TKey, TValue> et SortedDictionary<TKey, TValue>, offrent l'accès à leurs éléments par la clé de l'élément.
Les classes NameObjectCollectionBase et NameValueCollection, et les classes génériques KeyedCollection<TKey, TItem> et SortedList<TKey, TValue>, offrent l'accès à leurs éléments par l'index de base zéro ou par la clé de l'élément.
Chaque élément contiendra-t-il une seule valeur, une combinaison d'une clé et d'une valeur ou une combinaison d'une clé et de plusieurs valeurs ?
Une valeur : utilisez l'une des collections basée sur l'interface IList ou l'interface générique IList<T>.
Une clé et une valeur : utilisez l'une des collections basée sur l'interface IDictionary ou l'interface générique IDictionary<TKey, TValue>.
Une valeur avec clé incorporée : utilisez la classe générique KeyedCollection<TKey, TItem>.
Une clé et plusieurs valeurs : utilisez la classe NameValueCollection.
Avez-vous besoin de trier les éléments dans un ordre différent de celui dans lequel ils ont été entrés ?
La classe Hashtable trie ses éléments par leurs codes de hachage.
La classe SortedList et les classes génériques SortedDictionary<TKey, TValue> et SortedList<TKey, TValue> trient leurs éléments par la clé, selon les implémentations de l'interface IComparer et de l'interface générique IComparer<T>.
ArrayList fournit une méthode Sort qui prend une implémentation IComparer comme paramètre. Son équivalent générique, la classe générique List<T>, fournit une méthode Sort qui prend une implémentation de l'interface générique IComparer<T> comme paramètre.
Avez-vous besoin d'opérations de recherche et de récupération d'informations rapides ?
- ListDictionary est plus rapide que Hashtable pour les petites collections (10 éléments ou moins). La classe générique Dictionary<TKey, TValue> fournit une capacité de recherche plus rapide que la classe générique SortedDictionary<TKey, TValue>.
Avez besoin de collections qui acceptent uniquement des chaînes ?
StringCollection (sur la base de IList) et StringDictionary (sur la base de IDictionary) figurent dans l'espace de noms System.Collections.Specialized.
En outre, vous pouvez utiliser l'une des classes de collections génériques dans l'espace de noms System.Collections.Generic comme collection de chaînes fortement typée en spécifiant la classe String de leurs arguments de type générique.
LINQ to Objects
LINQ to Objects permet aux développeurs 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. En outre, les requêtes LINQ peuvent également augmenter les performances. Pour plus d'informations, consultez LINQ to Objects.
Voir aussi
Référence
System.Collections.Specialized