Problembehandlung bei Auflistungen

Aktualisiert: November 2007

Auf dieser Seite sind einige allgemeine Probleme aufgeführt, die beim Arbeiten mit Auflistungen auftreten können.

Verwenden des falschen Auflistungstyps

Einem Visual Basic-Entwickler stehen verschiedene Auflistungstypen zur Verfügung: die Visual Basic Collection-Klasse und die von .NET Framework bereitgestellten Auflistungsklassen. Diese Klassen sind nicht miteinander kompatibel. Wenn Sie eine Variable als einen bestimmten Auflistungstyp deklarieren, können Sie daher dieser Variablen nicht ein Objekt eines anderen Typs zuweisen. Außerdem können Sie nur auf die Methoden und Eigenschaften des Auflistungstyps zugreifen, den Sie deklariert haben.

Im Folgenden werden die wichtigsten Unterschiede zwischen den Auflistungsklassen von Visual Basic und .NET Framework beschrieben:

  • Indexbasis..NET Framework-Auflistungen sind nullbasiert, während die Visual Basic-Auflistung 1-basiert ist. Dies bedeutet, dass die Elemente einer Visual Basic-Auflistung über Indexwerte von 1 bis zum Wert der Count-Eigenschaft (Collection-Objekt) verfügen, während die Indexwerte der Elemente einer .NET Framework-Auflistung von 0 bis zum Wert der Count-Eigenschaft der Auflistung minus 1 reichen.

  • Elementtyp. Die Visual Basic-Auflistung unterstützt Elemente vom Typ Object. Dies ist nicht typsicher, weil Sie ein Element von einem beliebigen Datentyp hinzufügen können. Dies führt i. d. R. zu einer Leistungsminderung, da der Compiler Boxing und Unboxing auf die Elemente anwenden muss, um sie in den Object-Datentyp und aus diesem zu konvertieren. Einige .NET Framework-Auflistungen enthalten ebenfalls Elemente vom Typ Object, doch viele andere sind stark typisiert. Dies bedeutet, dass sie Elemente eines bestimmten Typs unterstützen und daher typsicher sind. Dies hat i. d. R. eine optimale Leistung zur Folge.

  • Elemente mit Schlüsseln. Die Visual Basic-Auflistung ermöglicht es Ihnen, einen Schlüssel anzugeben, wenn Sie ihr ein Element hinzufügen. Der Schlüssel ist ein eindeutiger String-Wert, den Sie später für den Zugriff auf das jeweilige Element verwenden können. Die .NET Framework-Auflistungen unterscheiden sich in Bezug auf Schlüssel. Einige unterstützen Schlüssel und andere nicht.

Die folgenden Namespaces enthalten die verschiedenen Auflistungsklassendefinitionen:

  • Microsoft.VisualBasic – die Collection-Klasse von Visual Basic.

  • System.Collections – bestimmte Auflistungsklassen, z. B. Listen, Warteschlangen, Bitarrays, Hashtabellen und Wörterbücher.

  • System.Collections.Generic – generische Auflistungsklassen, mit denen Sie stark typisierte Auflistungen erstellen und beim Erstellen den Elementdatentyp angeben können.

  • System.Collections.Specialized – spezielle und stark typisierte Auflistungsklassen, z. B. Bibliotheken mit verketteten Listen und Hybridwörterbücher, Bitvektor- und Name-Objekt-Auflistungen sowie Auflistungen, die nur Zeichenfolgen enthalten.

Richtige Vorgehensweise

Bestimmen Sie den Auflistungstyp, der für Ihre Bedürfnisse am besten geeignet ist. Deklarieren Sie die Auflistungsvariable mit diesem Typ, und erstellen Sie ein Objekt von demselben Typ. Verwenden Sie Vollqualifizierung, um sicherzustellen, dass Sie den gewünschten Auflistungstyp angeben. Im folgenden Beispiel werden zwei Deklarationen mit Vollqualifizierung veranschaulicht.

Dim customers As New Microsoft.VisualBasic.Collection()
Dim stringQueue As New System.Collections.Generic.Queue(Of String)

Nachdem Sie eine Auflistung von einem bestimmten Typ erstellt haben, dürfen Sie nur die für diesen Typ definierten Methoden und Eigenschaften verwenden. Legen Sie Option Strict On fest, um falsche Objektzuweisungen oder falschen Memberzugriff zur Kompilierzeit abzufangen.

Siehe auch

Konzepte

Auflistungen in Visual Basic

Visual Basic-Auflistungsklasse

Referenz

Option Strict-Anweisung