Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
List<T> ist die generische Klasse, die entspricht ArrayList.
Dictionary<TKey,TValue> und ConcurrentDictionary<TKey,TValue> sind die generischen Klassen, die Hashtable entsprechen.
Collection<T> ist die generische Klasse, die entspricht CollectionBase. Collection<T> kann als Basisklasse verwendet werden, aber im Gegensatz CollectionBasedazu ist es nicht abstrakt, was die Verwendung erheblich erleichtert.
ReadOnlyCollection<T> ist die generische Klasse, die entspricht ReadOnlyCollectionBase. ReadOnlyCollection<T> ist nicht abstrakt und verfügt über einen Konstruktor, der es einfach macht, eine vorhandene List<T> als schreibgeschützte Auflistung verfügbar zu machen.
Die Queue<T>Klassen , ConcurrentQueue<T>, ImmutableQueue<T>, ImmutableArray<T>, SortedList<TKey,TValue>und ImmutableSortedSet<T> generische Klassen entsprechen den entsprechenden nichtgenerischen Klassen mit denselben Namen.
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.
- ImmutableArray<T>.Builder
- ImmutableDictionary<TKey,TValue>.Builder
- ImmutableHashSet<T>.Builder
- ImmutableList<T>.Builder
- ImmutableSortedDictionary<TKey,TValue>.Builder
- ImmutableSortedSet<T>.Builder
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.