Freigeben über


Verwenden von generischen Auflistungen

Die Verwendung generischer Sammlungen bietet Ihnen den automatischen Vorteil der Typsicherheit, ohne von einem Basiskollektions-Typ ableiten und typspezifische Member implementieren zu müssen. Generische Sammlungstypen sind im Allgemeinen leistungsfähiger als die entsprechenden nichtgenerischen Sammlungstypen (und besser als Typen, die von nichtgenerischen Basissammlungstypen abgeleitet werden), wenn die Sammlungselemente Werttypen sind, da bei Generika die Elemente nicht geboxt werden müssen.

Verwenden Sie für Programme, die auf .NET Standard 1.0 oder höher abzielen, die generischen Auflistungsklassen im System.Collections.Concurrent Namespace, wenn mehrere Threads elemente gleichzeitig aus der Auflistung hinzufügen oder entfernen. Wenn die Unveränderlichkeit erwünscht ist, sollten Sie außerdem die generischen Auflistungsklassen im System.Collections.Immutable Namespace berücksichtigen.

Die folgenden generischen Typen entsprechen vorhandenen Sammlungstypen:

Weitere Typen

Mehrere generische Sammlungstypen weisen keine nichtgenerischen Gegensätze auf. Hierzu gehören:

  • LinkedList<T> ist eine vielfältig einsetzbare verknüpfte Liste, die O(1)-Einfüge- und Löschvorgänge bereitstellt.

  • SortedDictionary<TKey,TValue> ist ein sortiertes Wörterbuch mit O(log n)-Operationen zum Einfügen und Abrufen, wodurch es eine nützliche Alternative zu SortedList<TKey,TValue> ist.

  • KeyedCollection<TKey,TItem> ist eine Hybridlösung zwischen einer Liste und einem Wörterbuch, die eine Möglichkeit zum Speichern von Objekten bietet, die ihre eigenen Schlüssel enthalten.

  • BlockingCollection<T> implementiert eine Sammlungsklasse mit Begrenzungs- und Blockierungsfunktionen.

  • ConcurrentBag<T> bietet schnelles Einfügen und Entfernen von ungeordneten Elementen.

Unveränderliche Konstrukteure

Wenn Sie unveränderlichkeitsfunktionen in Ihrer App wünschen, bietet der System.Collections.Immutable Namespace generische Sammlungstypen, die Sie verwenden können. Alle unveränderlichen Sammlungstypen bieten Builder Klassen, die die Leistung optimieren können, wenn Sie mehrere Mutationen ausführen. Die Builder-Klasse gruppiert Operationen in einem veränderbaren Zustand. Wenn alle Mutationen abgeschlossen wurden, rufen Sie die ToImmutable Methode auf, um alle Knoten zu "fixieren" und eine unveränderliche generische Sammlung zu erstellen, z. B. eine ImmutableList<T>.

Das Builder Objekt kann durch Aufrufen der nichtgenerischen CreateBuilder() Methode erstellt werden. Von einer Builder Instanz aus können Sie aufrufen ToImmutable(). Ebenso können Sie über die Immutable*-Auflistung ToBuilder() aufrufen, um eine Generator-Instanz aus der generischen unveränderlichen Auflistung zu erstellen. Im Folgenden sind die verschiedenen Builder Typen aufgeführt.

LINQ to Objects

Mit der LINQ to Objects-Funktion können Sie LINQ-Abfragen verwenden, um auf Speicherobjekte zuzugreifen, solange der Objekttyp die Schnittstelle System.Collections.IEnumerable oder System.Collections.Generic.IEnumerable<T> implementiert. LINQ-Abfragen bieten ein gemeinsames Muster für den Zugriff auf Daten; sind in der Regel präziser und lesbarer als Standardschleifen foreach und bieten Filter-, Sortier- und Gruppierungsfunktionen. LINQ-Abfragen können auch die Leistung verbessern. Weitere Informationen finden Sie unter LINQ to Objects (C#),LINQ to Objects (Visual Basic) und Parallel LINQ (PLINQ).

Zusätzliche Funktionalität

Einige der generischen Typen weisen Funktionen auf, die in den nichtgenerischen Sammlungstypen nicht gefunden werden. Beispielsweise verfügt die List<T> Klasse, die der nichtgenerischen ArrayList Klasse entspricht, über eine Reihe von Methoden, die generische Stellvertretungen akzeptieren, z. B. den Delegaten, mit dem Predicate<T> Sie Methoden zum Durchsuchen der Liste angeben können, der Delegat, der Action<T> Methoden darstellt, die für jedes Element der Liste handeln, und der Delegat, mit dem Converter<TInput,TOutput> Sie Konvertierungen zwischen Typen definieren können.

Mit der List<T> Klasse können Sie eigene IComparer<T> generische Schnittstellenimplementierungen zum Sortieren und Durchsuchen der Liste angeben. Die SortedDictionary<TKey,TValue>- und SortedList<TKey,TValue>-Klassen verfügen auch über diese Funktion. Darüber hinaus können Sie mit diesen Klassen Vergleichsabgleiche angeben, wenn die Auflistung erstellt wird. In ähnlicher Weise können Sie mit den Klassen Dictionary<TKey,TValue> und KeyedCollection<TKey,TItem> Ihre eigenen Gleichheitskomparatoren angeben.

Siehe auch