Freigeben über


Verwenden von generischen Auflistungen

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.

In Programmen mit der Zielversion .NET Framework, Version 4 oder höher sollten generische Auflistungsklassen im System.Collections.Concurrent-Namespace verwendet werden, wenn mehrere Threads möglicherweise gleichzeitig Elemente aus der Auflistung entfernten oder der Auflistung hinzufügen.

Die folgenden generischen Typen entsprechen vorhandenen Auflistungstypen:

Zusätzliche Typen

Für mehrere generische Auflistungstypen sind keine nicht generischen Entsprechungen verfügbar. Sie umfassen:

  • 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.

  • BlockingCollection<T> implementiert eine Auflistungsklasse mit Begrenzungs- und Blockadefunktionen.

  • ConcurrentBag<T> ermöglicht das schnelle Einfügen und Löschen unsortierter Elemente.

LINQ to Objects

Mit der LINQ to Objects-Funktion können Sie LINQ-Abfragen für den Zugriff auf Objekte im Arbeitsspeicher verwenden, solange der Objekttyp die System.Collections.IEnumerable- oder System.Collections.Generic.IEnumerable<T>-Schnittstelle 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-zu-Objekte und Paralleles LINQ (PLINQ).

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>- und SortedList<TKey, TValue>-Klassen verfügen ebenfalls über diese Funktion. Zudem ermöglichen diese Klassen beim Erstellen der Auflistung die Angabe von Vergleichen. In ähnlicher Weise können bei den Dictionary<TKey, TValue>- und KeyedCollection<TKey, TItem>-Klassen eigene Übereinstimmungsvergleiche angegeben werden.

Siehe auch

Weitere Ressourcen

Häufig verwendete Auflistungstypen

Generika in .NET Framework