Freigeben über


Visual Basic-Auflistungsklasse

Aktualisiert: November 2007

Eine Auflistung ist eine Gruppierungsmethode für mehrere miteinander verwandte Elemente. Es gibt eine Vielzahl verschiedener Auflistungstypen. Vordefinierte Auflistungen werden in Visual Basic-Anwendungen für viele Zwecke verwendet, z. B. die Control.ControlCollection-Klasse für eine Form-Klasse, die von der Controls-Eigenschaft des Formulars zurückgegeben wird. Sie können auch eigene Auflistungen erstellen und damit Objekte verwalten und verarbeiten.

Auflistungen eignen sich hervorragend zum Verfolgen von Objekten, die die Anwendung gegebenenfalls dynamisch erstellen oder zerstören muss. Aus dem folgenden Codefragment geht hervor, wie Sie mit der Add-Methode eines Visual Basic-Auflistungsobjekts eine Liste der vom Benutzer erstellten widget-Objekte anlegen.

' Declare and create the Collection object.
Public widgetColl As New Microsoft.VisualBasic.Collection() 
' Create a new widget and add it to the widgetColl collection.
Private Sub makeAWidget()
    Dim tempWidget As New widget()
    widgetColl.Add(tempWidget) 
End Sub

Im vorhergehenden Beispiel werden alle widget-Objekte, die über die makeAWidget-Prozedur erstellt wurden, von der widgetColl-Auflistung verwaltet und verfügbar gemacht. Sie können Objektverweise auf jedes widget-Objekt über den Index der Auflistung abrufen. Die Größe der Auflistung wird beim Hinzufügen eines neuen widget-Objekts automatisch angepasst. Sie können die Auflistung mittels For Each...Next-Anweisung (Visual Basic) durchlaufen. Sie können eine Textzeichenfolge als zweiten Parameter der Add-Methode bereitstellen, wenn Sie dem widget-Objekt einen Schlüssel zuweisen möchten, über den es abgerufen werden kann.

Das Visual BasicCollection-Objekt speichert alle Elemente als Object-Typ, sodass Sie ein Element mit beliebigem Datentyp hinzufügen können. Es gibt keine Vorkehrung, die das Hinzufügen ungeeigneter Datentypen verhindert. Sie können dieses Beschränkung jedoch umgehen, indem Sie die generischen Auflistungen des System.Collections.Generic-Namespaces verwenden. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer Auflistung von Objekten.

Erstellen und Löschen eines Auflistungsobjekts

Das New (Visual Basic)-Schlüsselwort in der Deklaration für die Variable widgetColl bewirkt die Erstellung eines Collection-Objekts, wenn die Steuerung an die Deklarationsanweisung übergeben wird. Da Collection kein Werttyp, sondern eine Klasse ist, müssen Sie eine Instanz dieser Klasse erstellen und einen Verweis auf diese Instanz in einer Variablen speichern. Diese Instanz ist ein Visual Basic-Auflistungsobjekt.

Ein Collection-Objekt ist wie jedes andere Objekt für die Garbage Collection (GC) bestimmt, wenn die letzte Variable, die einen Verweis auf dieses Objekt enthält, auf Nothing (Visual Basic) festgelegt ist oder außerhalb des gültigen Bereichs liegt. Alle darin enthaltenen Objektverweise werden freigegeben, wenn dies von der Garbage Collection angefordert wird. Aus diesem Grund wird die Variable widgetColl im vorhergehenden Beispiel in der übergeordneten Klasse deklariert, damit diese während der gesamten Lebensdauer des Programms vorhanden ist.

Eine Auflistung verwaltet Verweise auf die von ihr gesteuerten Objekte, enthält die eigentlichen Objekte aber nicht. Deshalb werden beim Löschen eines Collection-Objekts die von ihm gesteuerten Objekte nicht gelöscht. Jedes Objekt, das ein Element der Auflistung war, bleibt so lange bestehen, bis es für die Garbage Collection gekennzeichnet wurde.

Arbeiten mit Elementen

Die grundlegenden Dienste des Hinzufügens, Löschens und Abrufens von Elementen einer Auflistung sind von Schlüsseln und Indizes abhängig. Ein Schlüssel ist ein String-Wert. Hierbei kann es sich um einen Namen, eine Personenkennzahl, eine Telefonnummer oder einfach um eine in eine Zeichenfolge konvertierte ganze Zahl handeln. Mit der Add-Methode können Sie einem Element einen Schlüssel zuweisen (siehe Gewusst wie: Hinzufügen, Löschen und Abrufen von Elementen einer Auflistung).

Ein Index in der Collection-Klasse ist eine ganze Zahl zwischen 1 und der Anzahl der Elemente in der Auflistung. Die Count-Eigenschaft (Collection-Objekt) gibt die aktuelle Anzahl von Elementen zurück. Sie können den Anfangswert des Index eines Elements steuern, indem Sie den Before-Parameter oder den After-Parameter beim Aufrufen von Add verwenden. Der Wert kann sich jedoch ändern, wenn andere Elemente hinzugefügt oder gelöscht werden. Weitere Informationen finden Sie unter Add-Methode (Collection-Objekt).

Sie können ein einzelnes Element aus einer Auflistung entfernen, indem Sie entweder seinen Schlüssel oder seinen Index an die Remove-Methode (Collection-Objekt) übergeben. Sie können eine Auflistung leeren und alle Elemente mit der Clear-Methode (Collection-Objekt) entfernen.

Zugreifen auf Elemente

Sie können einen Schlüsselwert an die Contains-Methode (Collection-Objekt) übergeben und so testen, ob eine Auflistung ein Element mit diesem Schlüssel enthält. Sie können ein Element abrufen, indem Sie entweder seinen Schlüssel oder seinen Index an die Item-Eigenschaft (Collection-Objekt) übergeben.

Mit Indexwerten und der Item-Eigenschaft können Sie die Elemente einer Auflistung durchlaufen. Sie können aber auch die For Each...Next-Anweisung (Visual Basic) verwenden. Im folgenden Beispiel werden zwei Möglichkeiten gezeigt, allen Mitarbeitern in einer Auflistung von employee-Objekten eine Gehaltserhöhung von 10 % zu gewähren, wobei davon ausgegangen wird, dass die Variable employeesColl einen Verweis auf ein Collection-Objekt enthält:

Option Strict On
' The following alternative uses the Count and Item properties.
Dim emp As employee
For counter As Integer = 1 To employeesColl.Count 
    emp = CType(employeesColl.Item(counter), employee)
    emp.payRate *= 1.1
Next counter
' The following alternative uses the For Each...Next statements.
For Each emp As employee In employeesColl
    emp.payRate *= 1.1
Next emp

Wenn Sie employeesColl jedoch mindestens ein Element hinzugefügt haben, das nicht den Typ employee aufweist, löst die For Each-Schleife zur Laufzeit eine ArgumentException-Ausnahme aus.

Datentyp der Elemente

Ein Visual Basic-Auflistungsobjekt speichert jedes Element mit dem Datentyp Object. Daher ist der Bereich der Datentypen, den Sie einem Collection-Objekt hinzufügen können, mit dem Bereich der Datentypen identisch, den Sie in einer Object-Variable speichern können. Hierzu gehören u. a. standardmäßige Datentypen, Objekte und Arrays sowie benutzerdefinierte Strukturen und Klasseninstanzen.

Da das Collection-Objekt jedes Element als Object speichert, gibt die Item-Eigenschaft einen Object-Wert zurück. Um das Element in Ihrem Code zu verwenden, müssen Sie es vom Object-Typ in den Laufzeitdatentyp des Elements konvertieren. Wie Sie das machen, hängt von der Einstellung des Typüberprüfungsschalters der Option Strict-Anweisung ab.

Implizites Konvertieren von "Object"

Wenn für Option Strict die Einstellung Off festgelegt ist, können Sie ein Collection-Element wie im folgenden Beispiel gezeigt implizit in den entsprechenden Datentyp konvertieren.

Option Strict Off
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
    aString = sampleColl.Item(1) 
Catch ex As Exception
    ' Insert code to run if the collection item cannot be converted to String.
End Try

Explizites Konvertieren von "Object"

Wenn für Option Strict die Einstellung On festgelegt ist, müssen Sie Object explizit in den Laufzeitdatentyp des Elements konvertieren. Um auf diese Weise ein Element aus Item zu erhalten, können Sie die Konvertierung wie im folgenden Beispiel gezeigt mittels der CType-Funktion ausführen.

Option Strict On
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
    aString = CType(sampleColl.Item(1), String) 
Catch ex As Exception
    ' Insert code to run if the collection item cannot be converted to String.
End Try

Zusätzliche Dienste

Die Eigenschaften und Methoden des Collection-Objekts bieten nur die grundlegenden Dienste für Auflistungen. Die Add-Methode kann beispielsweise nicht den Typ des zu einer Auflistung hinzugefügten Elements überprüfen. Diese Überprüfung kann jedoch sinnvoll sein, wenn Sie sicherstellen möchten, dass die Auflistung nur einen Elementtyp enthält. Wenn Sie dies in der Add-Methode sicherstellen können, liegt eine Auflistung mit starkem Typ vor. In diesem Fall müssen Sie den Rückgabetyp nicht von der Item-Eigenschaft in den entsprechenden Laufzeitdatentyp konvertieren. Dies führt zu einer Leistungssteigerung.

Durch das Erstellen eigener Auflistungsklassen (siehe Gewusst wie: Definieren von Auflistungen in eigenen Klassen) können Sie stabilere Funktionen sowie zusätzliche Eigenschaften, Methoden und Ereignisse bereitstellen.

Siehe auch

Konzepte

Auflistungen als Alternative zu Arrays

Auflistungen in Visual Basic

Referenz

Collection-Objekt (Visual Basic)