Verwenden von generischen Auflistungen
Aktualisiert: November 2007
Die Verwendung generischer Auflistungen ist grundsätzlich empfehlenswert, da sie als unmittelbaren Vorteil die Typsicherheit erlauben, ohne von einem Basisauflistungstyp ableiten und typenspezifische Member implementieren zu müssen. Generische Auflistungstypen bieten allgemein auch eine bessere Leistung als die entsprechenden nicht generischen Auflistungstypen (und als die von nicht generischen Basisauflistungstypen abgeleiteten Typen), wenn es sich bei den Auflistungselementen um Werttypen handelt, da bei Generika kein Boxing der Elemente erforderlich ist.
Die folgenden generischen Typen entsprechen vorhandenen Auflistungstypen:
List<T> ist die generische Klasse, die ArrayList entspricht.
Dictionary<TKey, TValue> ist die generische Klasse, die Hashtable entspricht.
Collection<T> ist die generische Klasse, die CollectionBase entspricht. Collection<T> kann als Basisklasse verwendet werden, die im Gegensatz zu CollectionBase jedoch nicht abstrakt ist. Dies erleichtert ihre Verwendung erheblich.
ReadOnlyCollection<T> ist die generische Klasse, die ReadOnlyCollectionBase entspricht. ReadOnlyCollection<T> ist nicht abstrakt und verfügt über einen Konstruktor, der ein Verfügbarmachen einer List<T> als schreibgeschützte Auflistung erleichtert.
Die generische Queue<T>, Stack<T>-Klasse und die generische SortedList<TKey, TValue>-Klasse entsprechen den jeweiligen nicht generischen Klassen mit gleichem Namen.
Zusätzliche Typen
Es gibt mehrere generische Auflistungstypen, zu denen keine nicht generischen Entsprechungen vorhanden sind:
LinkedList<T> ist eine vielfältig einsetzbare verknüpfte Liste, die O(1)-Einfüge- und Löschoperationen bereitstellt.
SortedDictionary<TKey, TValue> ist ein sortiertes Wörterbuch mit O(log n)-Einfüge- und -Abrufoperationen und somit eine nützliche Alternative zu SortedList<TKey, TValue>.
KeyedCollection<TKey, TItem> stellt eine Mischung aus Liste und Wörterbuch dar, die eine Möglichkeit zum Speichern von Objekten bietet, die ihre eigenen Schlüssel enthalten.
LINQ to Objects
Mit dem LINQ to Objects-Feature können Sie 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. LINQ-Abfragen können auch die Leistung verbessern. Weitere Informationen finden Sie unter LINQ to Objects.
Zusätzliche Funktionalität
Einige der generischen Typen besitzen Funktionen, die in den nicht generischen Auflistungstypen nicht vorhanden sind. Die List<T>-Klasse, die der nicht generischen ArrayList-Klasse entspricht, verfügt beispielsweise über eine Reihe von Methoden, die generische Delegaten akzeptieren, z. B. den Predicate<T>-Delegaten, mit dem Methoden zum Durchsuchen der Liste angegeben werden können, den Action<T>-Delegaten, der Methoden darstellt, die für jedes Element der Liste eine Aktion ausführen, und den Converter<TInput, TOutput>-Delegaten, mit dem Sie Konvertierungen zwischen Typen definieren können.
Die List<T>-Klasse ermöglicht es, eigene generische IComparer<T>-Schnittstellenimplementierungen zum Sortieren und Durchsuchen der Liste anzugeben. Die SortedDictionary<TKey, TValue>-Klasse und die SortedList<TKey, TValue>-Klasse bieten diese Möglichkeit ebenfalls und erlauben es darüber hinaus, die Vergleiche beim Erstellen der Auflistung anzugeben. In ähnlicher Weise ermöglichen es die Dictionary<TKey, TValue>-Klasse und KeyedCollection<TKey, TItem>-Klasse, die eigene Vergleiche auf Gleichheit anzugeben.
Siehe auch
Konzepte
Übersicht über Generika in .NET Framework