Freigeben über


Verwenden von generischen Auflistungen

Das Verwenden von generischen Sammlungen bietet den unmittelbaren Vorteil von Typsicherheit, ohne typenspezifische Member von einem Basissammlungstyp ableiten und implementieren zu müssen. Generische Sammlungstypen bieten allgemein auch eine bessere Leistung als die entsprechenden nicht generischen Sammlungstypen (und besser als Typen, die von nicht generischen Basissammlungstypen abgeleitet sind), wenn die Sammlungselemente Werttypen sind, da bei Generics keine Notwendigkeit zum Einschließen der Elemente besteht.

Für Programme, die auf .NET Standard 1.0 oder höher abzielen, sollten Sie die generischen Auflistungsklasse im System.Collections.Concurrent-Namespace verwenden, wenn mehrere Threads möglicherweise Elemente gleichzeitig der Auflistung hinzufügen oder daraus entfernen. Wenn außerdem Unveränderlichkeit gewünscht ist, sollten Sie die generischen Auflistungsklasse im Namespace System.Collections.Immutable in Erwägung ziehen.

Die folgenden generischen Typen entsprechen vorhandenen Auflistungstypen:

Zusätzliche Typen

Einige generische Auflistungstypen haben keine nicht generischen Entsprechungen. Hierzu gehören Folgende:

Unveränderliche Generatoren

Wenn Sie in Ihrer App Unveränderlichkeitsfunktionen wünschen, bietet der Namespace System.Collections.Immutable generische Auflistungstypen, die Sie verwenden können. Alle unveränderlichen Auflistungstypen bieten Builder-Klassen, die die Leistung optimieren können, wenn Sie mehrere Mutationen ausführen. Die Builder-Klasse wendet Batches auf Vorgänge in einem veränderlichen Zustand an. Wenn alle Mutationen abgeschlossen sind, rufen Sie die ToImmutable-Methode auf, um alle Knoten zu „fixieren“, und erstellen Sie eine unveränderliche generische Auflistung, zum Beispiel eine ImmutableList<T>.

Das Builder-Objekt kann durch Aufruf der nicht generischen CreateBuilder()-Methode erstellt werden. Über eine Builder-Instanz können Sie ToImmutable() aufrufen. Ebenso können Sie über die Immutable*-Auflistung ToBuilder() aufrufen, um eine Generator-Instanz aus der generischen unveränderlichen Auflistung zu erstellen. Folgende Typen sind unterschiedliche Builder-Typen.

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 to Objects (C#), LINQ to Objects (Visual Basic) und Parallel LINQ (PLINQ).

Zusätzliche Funktionen

Einige der generischen Typen besitzen Funktionen, die es in den nicht generischen Auflistungstypen nicht gibt. Die List<T> -Klasse, die der nicht generischen ArrayList -Klasse entspricht, hat z. B. eine Reihe von Methoden, die generische Delegaten akzeptieren, z. B. den Predicate<T> -Delegaten, mit dem Sie Methoden zum Durchsuchen der Liste angeben können, den Action<T> -Delegaten, der Methoden für die einzelnen Listenelemente darstellt, und den Converter<TInput,TOutput> -Delegaten, mit dem Sie Konvertierungen zwischen Typen definieren können.

Mit der List<T> -Klasse können Sie Ihre eigenen generischen IComparer<T> -Schnittstellenimplementierungen zum Sortieren und Durchsuchen der Liste angeben. Die Klassen SortedDictionary<TKey,TValue> und SortedList<TKey,TValue> verfügen ebenfalls über diese Funktion. Darüber hinaus ermöglichen Ihnen diese Klassen das Angeben von Vergleichen beim Erstellen der Auflistung. In ähnlicher Weise können Sie mit den Klassen Dictionary<TKey,TValue> und KeyedCollection<TKey,TItem> eigene Gleichheitsvergleiche angeben.

Siehe auch