VB.NET Dictionary – der komplette Guide mit Beispielen (2026)
Das VB.NET Dictionary speichert Schlüssel-Wert-Paare und bietet nahezu sofortige Lookup-Zeiten, unabhängig von der Datenmenge. In diesem Guide lernst du, wann du ein Dictionary statt einer Liste verwendest, wie du Einträge hinzufügst, entfernst und iterierst und wie du Randfälle wie doppelte Schlüssel sicher behandelst.
Inhaltsverzeichnis
- 1 Vergleich einer Liste zu einem Dictionary
- 2 Wann sollte man ein VB NET Dictionary verwenden?
- 3 Wie man dem VB NET Dictionary Einträge hinzufügt
- 4 Wie iteriert man über ein VB.NET Dictionary?
- 5 Wie entfernt man einen Eintrag?
- 6 Wie liest man einen Wert per Schlüssel aus?
- 7 FAQ
- 8 Fazit
- 9 Downloads
- 10 Weiterführende Links
Vergleich einer Liste zu einem Dictionary
Wie ich oben bereits erwähnt habe, sollten wir zuerst einmal die grobe Funktionalität eines Dictionaries zu einer generischen Liste vergleichen. Das hilft uns dabei, das Wörterbuch (Dictionary) aus dem NET-Framework besser zu verstehen. Lass‘ uns also nun eine Liste erstellen und ein paar Einträge hinzufügen, wir werden hierfür auch eine kleine Klasse hinzufügen. Diese Klasse dient nur zu Testzwecken und bleibt somit eher einfach.
Erstelle nun eine neue Datei für die Klasse Namens „Customer.vb“ und speichere Sie.
Public Class Customer
Public Property Id As Integer
Public Property Name As String
Sub New(id As Integer, name As String)
Me.Id = id
Me.Name = name
End Sub
End Class
Nachdem wir die Klasse erstellt haben, können wir nun eine Listen-Eigenschaft innerhalb der Form deklarieren. Als nächstes instanziieren wir die deklarierte Eigenschaft im Form-Konstruktor. Im letzten Schritt werden wir dann ein paar Kunden-Instanzen zu dieser Liste hinzufügen.
Public Class Form1
Public Property Customers As List(Of Customer)
Sub New()
InitializeComponent()
Customers = New List(Of Customer)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Customers.Add(New Customer(1, "Some Ltd."))
Customers.Add(New Customer(2, "Nice Profit Ltd."))
Customers.Add(New Customer(3, "Perfect Devs Ltd."))
End Sub
End Class
Einen spezifischen Kunden finden
Eine erste von uns gewünschte Sache könnte es nun sein, einen spezifischen Kunden innerhalb dieser Liste zu finden. Grundsätzlich ist das nicht weiter schwierig, wenn man es einfach runterprogrammiert. Hier gibt es 2 gängige Ansätze, einerseits das eher Oldschool-Prinzip mithilfe einer „For Each“-Schleife und andererseits die modernere LINQ-Variante.
' anderer Code
' ...
' vielleicht die Id des Ziel-Kunden aus einer Textbox ziehen?
Dim idToFind = 2
Dim foundCustomer As Customer
For Each customer In Customers
If customer.Id = idToFind Then
foundCustomer = customer
Exit For
End If
Next
' irgendwas mit dem Kunden machen, zumindest wenn gefunden..
Hier wäre der modernere LINQ-Ansatz (was engl. mehr oder weniger für sprachintegrierte Abfragen steht), Welcher praktisch nur eine Zeile ist.
' anderer Code ' ... Dim idToFind = 2 Dim foundCustomer = Customers.SingleOrDefault(Function(x) x.Id = idToFind) ' irgendwas mit dem Kunden machen, zumindest wenn gefunden..
Wo ist der Haken?
Wie Du Dir anhand des Codes vielleicht schon denken konntest, muss so jedes Element durchgegangen und die Id des jeweiligen Kunden mit der übergebenen Id verglichen werden. Stell Dir nun vor, es wäre eine Liste von ca. 300000 Einträgen. Schaue Dir hierzu gerne einmal die unten vorbereiteten Testergebnisse an (wenig Einträge versus 300000 Einträge).
Der erste Test wird hierzu einfach 3 Einträge zur Liste hinzufügen und dann suchen wir z. B. nach dem Kunden mit der Id 2. Hört sich erstmal relativ einfach, bzw. nicht so spannend an, aber Moment..

Als Nächstes schauen wir uns den zweiten Test an, wo wir wesentlich mehr Testdaten verwenden werden. In diesem Beispiel nutze ich die tatsächlich angesprochenen 300000 Einträge und schaue nach Kunden-Id 280000.

Kannst Du die dramatische Performance-Änderung sehen? Im nächsten Abschnitt werden wir diese gleiche Aufgabe mit einem Dictionary lösen. Natürlich sind die obigen Zeiten für uns als Menschen eher wie ein Du weißt schon im Wind, aber.. Stell Dir diese Performance-Verluste in z. B. einer Server-App vor, man möchte natürlich, dass der Server so performant wie nur möglich läuft.
Für unseren nächsten Testvorgang werden wir nun schauen, warum wir dann lieber ein Dictionary verwenden sollten. PS: Du kannst dieses Testprojekt auch weiter unten in der Downloads-Sektion finden.
Wann sollte man ein VB NET Dictionary verwenden?
Nach dem riesigen, oben gesehenen Performance-Unterschied, werden wir uns nun das Dictionary im Einsatz ansehen. Wenn es um „Lookup“-Zeiten geht, strahlt das Dictionary – ich meine dazu ist ein Wörterbuch ja auch irgendwie da, richtig? Wie ich bereits oben erwähnte, ist das Wörterbuch in VB NET (Dictionary) einfach nur eine Auflistung von „Schlüssel-zu-Wert-Paaren“.
Du kannst einen existierenden Schlüssel verwenden, um den sich dahinter befindlichen Wert herauszufinden. Du kannst auch prüfen, ob das Dictionary einen bestimmten Schlüssel überhaupt beinhaltet. Schauen wir es uns nun in Aktion an, wenn es also um 300000 Einträge und dem Ziel-Kunden mit der Id 280000 geht.

Der Unterschied ist deutlich! Das Dictionary hat das Heraussuchen des Kunden mit der Id 280000 in einem kleinen Augenzwinkern erledigt.
Wie man dem VB NET Dictionary Einträge hinzufügt
Nachdem wir die Performance für unsere gestellte Aufgabe nun zwischen einer Liste und einem Dictionary verglichen haben, gehen wir ein Schritt weiter. Wir sehen uns nun an, wie man dem Wörterbuch einige Einträge hinzufügen kann. Für dieses Beispiel werde ich auf ein einfaches Telefonbuch wechseln.
Zuerst instanziieren wir eine neue Instanz der Dictionary-Klasse. Dafür brauchen wir zwei generische Typenargument. Der Erste sagt aus: „Hey, ich möchte Schlüssel-Wert-Paare mit einem Schlüssel vom Typ x speichern“. Der zweite Parameter sagt praktisch: „.. und ich möchte diese Schlüssel benutzen, um an passende Werte vom Typ y zu kommen“.
Einträge / Werte hinzufügen
In unserem Beispiel werden wir einen Namen für die Suche nach einer Telefonnummer verwenden. Letztendlich haben wir dann also einen String-Schlüssel, womit wir nach einem String-Wert suchen können.
Dim telefonbuch = new Dictionary(Of String, String)
' füge nun einige string zu string Zuordnungen hinzu (also Namen zu Telefonnummern)
' Beispiel-Nummern
telefonbuch.Add("Max Mustermann", "+491122334567")
telefonbuch.Add("Christine Doe", "+49188655542")
telefonbuch.Add("Michael Mustermann", "+4948862342")
Was passiert bei doppelten Schlüsseln?
Nachdem man nun einige Werte hinzugefügt hat fragt man sich ggf.: „Okay und was passiert, wenn ich doppelte Schlüssel hinzufügen?“. Das schauen wir uns nun im nächsten Schritt an. Ich habe dafür z. B. einfach einen Schlüssel namens „key“ und einen Wert namens „value“ zwei mal hintereinander hinzugefügt. Hier siehst Du, was dann passiert:

Man bekommt eine „ArgumentException„, Welches sich im „System“-Namespace befindet. Die bedeutet praktisch: „Hey, Du kannst keinen weiteren Eintrag mit dem gleichen Schlüssel namens ‚key‘ hinzufügen“.
Wie verhindert man doppelte Schlüssel in einem VB NET Dictionary?
Man kann eigentlich relativ einfach verhindern, dass man den oben genannten Fehler bekommt. Wir brauchen dafür einfach nur eine andere Methode der Dictionary-Klasse. Die Methode heißt „TryAdd„. Diese wird einfach versuchen, das jeweilige Schlüssel-Wert-Paar hinzuzufügen und gibt uns dann Bescheid, ob es geklappt hat. Dazu bekommen wir einen booleschen Wert a la „True“, oder „False“ zurück.
Dim erfolgreichHinzugefügt As Boolean
erfolgreichHinzugefügt = telefonbuch.TryAdd("Max Mustermann", "+491122334567")
' erfolgreichHinzugefügt wäre hier TRUE (beim ersten Mal!)
erfolgreichHinzugefügt = telefonbuch.TryAdd("Max Mustermann", "+491122334567")
' erfolgreichHinzugefügt wäre hier FALSE (beim zweiten Mal!)
Alternativ könntest Du auch vorher die „ContainsKey„-Funktion verwenden, um das Dictionary auf einen gewissen Schlüssel zu überprüfen.
If telefonbuch.ContainsKey("Max Mustermann") Then
' ohoh, das Wörterbuch beinhaltet bereits einen Schlüssel namens "Max Mustermann"
Else
' noch nicht in Verwendung, weiter..
End If
Wie iteriert man über ein VB.NET Dictionary?
Das Iterieren über ein Dictionary ist mit einer For-Each-Schleife unkompliziert. Jede Iteration liefert ein KeyValuePair mit Key und Value:
For Each paar As KeyValuePair(Of String, String) In telefonbuch
Console.WriteLine($"Name: {paar.Key}, Telefon: {paar.Value}")
Next
Wie entfernt man einen Eintrag?
Einträge werden über die Remove-Methode entfernt, einfach den Schlüssel übergeben. Existiert der Schlüssel nicht, passiert nichts und es wird keine Exception geworfen. Der Rückgabewert zeigt an, ob der Eintrag gefunden und entfernt wurde:
' Eintrag mit Schlüssel "Max Mustermann" entfernen
telefonbuch.Remove("Max Mustermann")
' oder prüfen, ob er tatsächlich entfernt wurde
Dim wurdeEntfernt = telefonbuch.Remove("Max Mustermann")
If wurdeEntfernt Then
' Schlüssel existierte und wurde entfernt
End If
Wie liest man einen Wert per Schlüssel aus?
Beim direkten Zugriff über den Index-Accessor wirft das Dictionary eine KeyNotFoundException, wenn der Schlüssel nicht existiert. Die sichere Alternative ist TryGetValue, sie gibt False zurück, ohne eine Exception zu werfen:
' riskant – wirft KeyNotFoundException wenn Schlüssel fehlt
Dim nummer = telefonbuch("Unbekannte Person")
' sicher – TryGetValue verwenden
Dim telefonnummer As String
If telefonbuch.TryGetValue("Max Mustermann", telefonnummer) Then
Console.WriteLine($"Gefunden: {telefonnummer}")
Else
Console.WriteLine("Schlüssel nicht gefunden.")
End If
FAQ
Bei einer Liste musst du zum Suchen alle Einträge durchlaufen. Ein Dictionary findet Werte per Schlüssel in nahezu konstanter Zeit, unabhängig von der Datenmenge.
Mit einer For Each-Schleife über KeyValuePair(Of TKey, TValue). Jede Iteration liefert .Key und .Value des aktuellen Eintrags.
Das Dictionary wirft eine ArgumentException. Verwende TryAdd oder prüfe vorher mit ContainsKey, um das zu vermeiden.
Verwende TryGetValue statt des Index-Accessors. So vermeidest du eine KeyNotFoundException bei fehlenden Schlüsseln.
Fazit

Am Ende vom heutigen Post fassen wir zusammen, was wir heute bezüglich der VB NET Dictionary gesehen haben. Grundsätzlich ist das Dictionary einfach eine Sammlung von Schlüssel-Wert-Paaren. Anhand gewisser Schlüssel, kann man in hoher Geschwindigkeit auf die zugeordneten Werte zugreifen. Denke daran, dass das Dictionary keine Garantie für die Reihenfolge der einzelnen Einträge gibt, schaue hierzu gerne in die Dokumentation.