Il Dictionary in Visual Basic è una collezione associativa che permette di memorizzare coppie chiave-valore. In VB.NET si utilizza Dictionary(Of TKey, TValue) dello spazio dei nomi System.Collections.Generic.
Le versioni precedenti di Visual Basic erano limitate a collezioni classiche (Collection), che supportavano solo chiavi stringa o numeriche senza tipizzazione. Con l'arrivo di VB.NET e del .NET Framework, nelle collezioni è stato introdotto il tipo generico Dictionary, che ha reso il lavoro con dati associativi più sicuro e veloce.
Gli errori tipici nell'uso del Dictionary includono:
Quando si lavora con il Dictionary è fondamentale:
ContainsKeyEsempio di codice:
Dim dict As New Dictionary(Of String, Integer) dict("mele") = 10 ' Controllo sicuro prima dell'accesso: If dict.ContainsKey("banane") Then Console.WriteLine(dict("banane")) Else Console.WriteLine("Chiave non trovata!") End If
Peculiarità chiave:
Quale eccezione viene lanciata quando si tenta di accedere a una chiave inesistente nel Dictionary e come evitarla?
Errore: System.Collections.Generic.KeyNotFoundException. È necessario utilizzare il metodo ContainsKey per prevenire quest'errore.
È possibile modificare le chiavi di elementi già esistenti in Dictionary?
No. Una chiave non può essere modificata dopo l'aggiunta — si può solo rimuovere l'elemento e aggiungerne uno nuovo con una chiave diversa.
Qual è la differenza tra Dictionary e Hashtable in VB.NET?
Il Dictionary è sicuro per i tipi (generic), funziona più velocemente e non richiede packing/unpacking dei valori. Hashtable è obsoleto e non consigliato per l'uso.
** Caso negativo
Un programmatore memorizza le statistiche di vendita per città tramite Dictionary, ma non verifica se la città-chiave è nella collezione prima dell'accesso. Ottiene KeyNotFoundException quando il report è per una nuova città.
Vantaggi:
Svantaggi:
** Caso positivo
Lo stesso report, ma quando si accede alla chiave viene sempre utilizzato il controllo ContainsKey e se la chiave è assente, viene restituito 0 o visualizzato un messaggio.
Vantaggi:
Svantaggi: