Een Dictionary in Visual Basic is een associatieve collectie die paren van sleutel-waarde opslaat. In VB.NET wordt hiervoor Dictionary(Of TKey, TValue) uit de namespace System.Collections.Generic gebruikt.
Vroege versies van Visual Basic waren beperkt tot klassieke collecties (Collection), die alleen string- of numerieke sleutels zonder typificatie ondersteunden. Met de komst van VB.NET en .NET Framework kwamen er generieke Dictionary-collecties, die het werken met associatieve gegevens veiliger en sneller maakten.
Typische fouten bij het gebruik van Dictionary zijn onder andere:
Bij het werken met Dictionary is het cruciaal om:
ContainsKeyVoorbeeldcode:
Dim dict As New Dictionary(Of String, Integer) dict("appels") = 10 ' Veilige controle voorafgaand aan toegang: If dict.ContainsKey("bananen") Then Console.WriteLine(dict("bananen")) Else Console.WriteLine("Sleutel niet gevonden!") End If
Belangrijke kenmerken:
Welke uitzondering wordt er gegooid bij het proberen toegang te krijgen tot een ontbrekende sleutel in een Dictionary en hoe kan dit worden voorkomen?
Fout: System.Collections.Generic.KeyNotFoundException. De methode ContainsKey moet worden gebruikt om deze fout te voorkomen.
Is het mogelijk om sleutels van al bestaande Dictionary-elementen te wijzigen?
Nee. Een sleutel kan niet worden gewijzigd na toevoeging — je kunt alleen het element verwijderen en een nieuwe met een andere sleutel toevoegen.
Wat is het verschil tussen Dictionary en Hashtable in VB.NET?
Dictionary is typeveilig (generic), werkt sneller en vereist geen boxing/unboxing van waarden. Hashtable is oud en wordt niet aanbevolen voor gebruik.
** Negatief geval
Een programmeur slaat de verkoopstatistieken per stad op via een Dictionary, maar controleert niet of de stad-sleutel in de collectie aanwezig is voordat hij toegang krijgt. Hij krijgt een KeyNotFoundException wanneer de rapportage voor een nieuwe stad wordt gedaan.
Voordelen:
Nadelen:
** Positief geval
Hetzelfde rapport, maar bij toegang tot een sleutel wordt altijd de ContainsKey-controle gebruikt, en als de sleutel ontbreekt, wordt 0 weergegeven of een bericht getoond.
Voordelen:
Nadelen: