Geschichte der Frage
Mit der Einführung des .NET Framework hat Visual Basic eine typsichere und leistungsstarke Struktur zur Speicherung von Schlüssel-Wert-Paaren — Dictionary(Of TKey, TValue) — erhalten. Dies ist der Standard-assoziative Container für schnelle Suche.
Problem
Die Arbeit mit dem Wörterbuch führt oft zu Fehlern: Der Versuch, auf einen Wert über einen Schlüssel zuzugreifen, der nicht existiert, führt zu einer Ausnahme. Häufig werden auch die Operationen zum Hinzufügen, Ändern und Hinzufügen neuer Werte verwechselt.
Lösung
Zum Zugriff auf Werte werden der Indexer oder die Methoden TryGetValue, ContainsKey verwendet. Um eine KeyNotFoundException zu vermeiden, führen Sie immer eine explizite Überprüfung durch:
Beispielcode:
Dim dict As New Dictionary(Of String, Integer)() dict.Add("eins", 1) dict("zwei") = 2 ' Hinzufügen eines neuen Paares If dict.ContainsKey("drei") Then Console.WriteLine(dict("drei")) ' Führt nicht zu einem Fehler Else Console.WriteLine("Schlüssel nicht gefunden") End If Dim value As Integer = 0 If dict.TryGetValue("eins", value) Then Console.WriteLine(value) End If
Hauptmerkmale:
Stimmt es, dass dict("schlüssel") immer ein neues Schlüssel-Wert-Paar hinzufügt?
Nein. Wenn der Schlüssel existiert, wird der Wert aktualisiert. Wenn er nicht existiert, wird das Paar hinzugefügt. Um einen Fehler beim Hinzufügen bei Vorhandensein des Schlüssels zu verursachen, verwenden Sie Add.
Wird TryGetValue eine Ausnahme auslösen, wenn der Schlüssel nicht vorhanden ist?
Nein. Es gibt False zurück, ohne eine Ausnahme auszulösen, und ändert value nicht. Dies ist eine sichere Zugriffsweise.
Kann man im Dictionary Werttypen (z.B. Integer) als TValue speichern und dennoch null für einen nicht vorhandenen Schlüssel erhalten?
Nein. Für Werttypen wird der Standardwert für den Typ zurückgegeben (0 für Integer), aber der Zugriff über den Indexer würde dennoch eine Ausnahme auslösen, wenn der Schlüssel nicht vorhanden ist.
Zugriff auf das Wörterbuch über den Index ohne vorherige Prüfung, die an verschiedenen Stellen wiederholt wird — sporadische Abstürze des Programms.
Vorteile:
Nachteile:
Weitverbreitete Anwendung von TryGetValue, alle Zugriffe sind geschützt, Fälle mit nicht vorhandenen Schlüsseln werden logisch verarbeitet.
Vorteile:
Nachteile: