Häufig verwendete Auflistungstypen

Auflistungstypen stellen verschiedene Methoden zum Sammeln von Daten dar, z. B. Hashtabellen, Warteschlangen, Stapel, Bags, Wörterbücher und Listen.

Alle Auflistungen basieren entweder direkt oder indirekt auf der ICollection- oder der ICollection<T>-Schnittstelle. IList und IDictionary sowie ihre generischen Entsprechungen werden von diesen beiden Schnittstellen abgeleitet.

In Auflistungen, die auf IList oder direkt auf ICollection basieren, enthält jedes Element nur einen Wert. Zu diesen Typen gehören:

In Auflistungen, die auf der IDictionary-Schnittstelle basieren, enthält jedes Element sowohl einen Schlüssel als auch einen Wert. Zu diesen Typen gehören:

Die KeyedCollection<TKey,TItem>-Klasse ist eindeutig, weil es sich dabei um eine Liste von Werten mit Schlüsseln handelt, die in die Werte eingebettet sind. Daher verhält sie sich sowohl wie eine Liste als auch wie ein Wörterbuch.

Wenn effizienter Zugriff auf Multithreadauflistungen erforderlich ist, verwenden Sie die generischen Auflistungen im System.Collections.Concurrent-Namespace.

Die Klassen Queue und Queue<T> stellen First-In-First-Out-Listen bereit. Die Klassen Stack und Stack<T> stellen Last-In-First-Out-Listen bereit.

Starke Typisierung

Generische Auflistungen sind die beste Lösung für eine starke Typisierung. Das Hinzufügen eines Elements, das einen anderen Typ als Int32 aufweist, zu einer List<Int32>-Auflistung verursacht beispielsweise einen Kompilierzeitfehler. Wenn Ihre Sprache allerdings keine parametrische Polymorphie unterstützt, enthält der System.Collections-Namespace abstrakte Basisklassen, die erweitert werden können, um stark typisierte Auflistungsklassen zu erstellen. Zu diesen Basisklassen gehören:

Unterschiede zwischen Auflistungen

Auflistungen unterscheiden sich in der Art und Weise, wie sie Elemente speichern, sortieren und vergleichen und wie sie Suchvorgänge ausführen.

Die SortedList-Klasse und die generische SortedList<TKey,TValue>-Klasse stellen sortierte Versionen der Hashtable-Klasse und der generischen Dictionary<TKey,TValue>-Klasse bereit.

Alle Auflistungen verwenden nullbasierte Indizes, mit Ausnahme von Array, in der auch nicht nullbasierte Arrays zulässig sind.

Sie können entweder über den Schlüssel oder den Index des Elements auf die Elemente von SortedList oder KeyedCollection<TKey,TItem> zugreifen. Sie können nur über den Schlüssel des Elements auf die Elemente von Hashtable oder Dictionary<TKey,TValue> zugreifen.

Verwenden von LINQ mit Auflistungstypen

Das LINQ to Objects-Feature bietet ein allgemeines Muster für den Zugriff auf In-Memory-Objekte eines beliebigen Typs, der IEnumerable oder IEnumerable<T> implementiert. LINQ-Abfragen bieten gegenüber Standardkonstrukten wie foreach-Schleifen mehrere Vorteile:

  • Sie sind knapp und präzise und leichter zu verstehen.
  • Sie können Daten filtern, sortieren und gruppieren.
  • Sie können die Leistung verbessern.

Weitere Informationen finden Sie unter LINQ to Objects (C#), LINQ to Objects (Visual Basic) und Parallel LINQ (PLINQ).

Titel Beschreibung
Sammlungen und Datenstrukturen Erläutert die unterschiedlichen Auflistungstypen, die in .NET verfügbar sind, z. B. Stapel, Warteschlangen, Listen, Arrays und Wörterbücher.
Hashtable-Auflistungstyp und Dictionary-Auflistungstyp Beschreibt die Funktionen von generischen und nicht generischen hashbasierten Wörterbuchtypen.
Sortierte Auflistungstypen Beschreibt Klassen, die Sortierfunktionen für Listen und Sätze bereitstellen.
Generics In diesem Artikel wird das Generics-Feature beschrieben, einschließlich der generischen Auflistungen, Delegaten und Schnittstellen, die von .NET bereitgestellt werden. Enthält Links zur Featuredokumentation für C#, Visual Basic und Visual C++ sowie zu unterstützenden Technologien wie der Reflektion.

Referenz

System.Collections

System.Collections.Generic

System.Collections.ICollection

System.Collections.Generic.ICollection<T>

System.Collections.IList

System.Collections.Generic.IList<T>

System.Collections.IDictionary

System.Collections.Generic.IDictionary<TKey,TValue>