Auswählen einer Auflistungsklasse
Aktualisiert: November 2007
Wählen Sie Ihre System.Collections-Klasse sorgfältig aus. Wenn der falsche Typ ausgewählt wird, kann dies die Verwendung der Auflistung einschränken.
Beachten Sie Folgendes:
Benötigen Sie eine sequenzielle Liste, bei der ein Element normalerweise verworfen werden kann, wenn sein Wert abgerufen wurde?
Wenn dies zutrifft, sollten Sie die Verwendung der Queue-Klasse oder der generischen Queue<T>-Klasse in Erwägung ziehen, falls FIFO (First-in-First-out-)Verhalten erforderlich ist. Falls Sie LIFO (Last-in-First-out-)Verhalten benötigen, sollten Sie die Stack-Klasse oder die generische Stack<T>-Klasse in Erwägung ziehen.
Falls nicht, verwenden Sie die übrigen Auflistungen.
Benötigen Sie Zugriff auf Elemente in einer bestimmten Reihenfolge, z. B. FIFO-, LIFO- oder beliebiger Reihenfolge?
Die Queue-Klasse und die generische Queue<T>-Klasse bieten FIFO-Zugriff.
Die Stack-Klasse und die generische Stack<T>-Klasse bieten LIFO-Zugriff.
Bei der generischen LinkedList<T>-Klasse ist ein sequenzieller Zugriff entweder von oben nach unten oder von unten nach oben möglich.
Bei den übrigen Auflistungen erfolgt der Zugriff zufällig.
Möchten Sie auf die einzelnen Elemente mithilfe eines Indizes zugreifen?
Auf die Elemente der ArrayList-Klasse und der StringCollection-Klasse sowie der generischen List<T>-Klasse kann über den nullbasierten Index des Elements zugegriffen werden.
Auf die Elemente der Klassen Hashtable, SortedList, ListDictionary und StringDictionary und auf die Elemente der generischen Dictionary<TKey, TValue>-Klasse und der generischen SortedDictionary<TKey, TValue>-Klasse kann über den Schlüssel des Elements zugegriffen werden.
Auf die Elemente der NameObjectCollectionBase-Klasse und der NameValueCollection-Klasse und auf die Elemente der generischen KeyedCollection<TKey, TItem>-Klasse und der generischen SortedList<TKey, TValue>-Klasse kann über den nullbasierten Index oder den Schlüssel des Elements zugegriffen werden.
Wird jedes Element einen Wert enthalten, eine Kombination aus einem Schlüssel und einem Wert oder eine Kombination aus einem Schlüssel und mehreren Werten?
Ein Wert: Verwenden Sie eine der Auflistungen, die auf der IList-Schnittstelle oder der generischen IList<T>-Schnittstelle basiert.
Ein Schlüssel und ein Wert: Verwenden Sie eine der Auflistungen, die auf der IDictionary-Schnittstelle oder der generischen IDictionary<TKey, TValue>-Schnittstelle basiert.
Ein Wert mit eingebettetem Schlüssel: Verwenden Sie die allgemeine KeyedCollection<TKey, TItem>-Klasse.
Ein Schlüssel und mehrere Werte: Verwenden Sie die NameValueCollection-Klasse.
Müssen die Elemente unabhängig von der Reihenfolge ihrer Eingabe sortiert werden?
Die Hashtable-Klasse sortiert ihre Elemente anhand ihrer Hashcodes.
Die SortedList-Klasse sowie die generische SortedDictionary<TKey, TValue>-Klasse und die generische SortedList<TKey, TValue>-Klasse sortieren ihre Elemente nach dem Schlüssel auf der Grundlage der Implementierungen der IComparer-Schnittstelle und der generischen IComparer<T>-Schnittstelle.
ArrayList stellt eine Sort-Methode bereit, die eine IComparer-Implementierung als Parameter akzeptiert. Ihre generische Entsprechung, die generische List<T>-Klasse, stellt eine Sort-Methode bereit, die eine Implementierung der generischen IComparer<T>-Schnittstelle als Parameter akzeptiert.
Ist schnelles Suchen und Abrufen von Informationen erforderlich?
- ListDictionary ist bei kleinen Auflistungen (mit höchstens 10 Elementen) schneller als Hashtable. Bei der generischen Dictionary<TKey, TValue>-Klasse werden Suchvorgänge schneller als bei der generischen SortedDictionary<TKey, TValue>-Klasse ausgeführt.
Werden Auflistungen gebraucht, die nur Zeichenfolgen annehmen?
StringCollection (basierend auf IList) und StringDictionary (basierend auf IDictionary) befinden sich im System.Collections.Specialized-Namespace.
Außerdem können Sie jede der generischen Auflistungsklassen im System.Collections.Generic-Namespace als stark typisierte Zeichenfolgenauflistungen verwenden, indem Sie die String-Klasse für ihre generischen Typargumente angeben.
LINQ to Objects
Mit dem LINQ to Objects-Feature können Entwickler LINQ-Abfragen für den Zugriff auf Objekte im Arbeitsspeicher verwenden, solange der Objekttyp IEnumerable oder IEnumerable<T> implementiert. LINQ-Abfragen bieten ein allgemeines Muster für den Datenzugriff, sind normalerweise präziser und besser lesbar als standardmäßige foreach-Schleifen und stellen Filter-, Sortier- und Gruppierungsfunktionen bereit. Außerdem können LINQ-Abfragen auch Leistungssteigerungen bereitstellen. Weitere Informationen finden Sie unter LINQ to Objects.
Siehe auch
Referenz
System.Collections.Specialized