Historique de la question
Avec l'arrivée de .NET Framework, Visual Basic a obtenu une structure de stockage de paires clé-valeur typée et à haute performance — Dictionary(Of TKey, TValue). C'est le conteneur associatif standard pour des recherches rapides.
Problème
Travailler avec un dictionnaire entraîne souvent des erreurs : une tentative d'accès à une valeur via une clé qui n'existe pas entraîne une exception. Les opérations d'ajout, de modification et d'ajout de nouvelles valeurs sont également souvent confondues.
Solution
Pour accéder aux valeurs, utilisez un indexeur ou les méthodes TryGetValue, ContainsKey. Pour éviter l'exception KeyNotFoundException, effectuez toujours une vérification explicite :
Exemple de code :
Dim dict As New Dictionary(Of String, Integer)() dict.Add("un", 1) dict("deux") = 2 ' Ajout d'une nouvelle paire If dict.ContainsKey("trois") Then Console.WriteLine(dict("trois")) ' Ne déclenchera pas d'erreur Else Console.WriteLine("Clé non trouvée") End If Dim value As Integer = 0 If dict.TryGetValue("un", value) Then Console.WriteLine(value) End If
Caractéristiques clés :
Est-il vrai que dict("clé") ajoute toujours une nouvelle paire clé-valeur ?
Non. Si la clé existe, la valeur est mise à jour. Si elle n'existe pas — la paire est ajoutée. Pour ajouter avec une erreur en cas de clé existante — utilisez Add.
Est-ce que TryGetValue lancera une exception si la clé n'existe pas ?
Non. Il renverra False, sans déclencher d'exception, et ne modifiera pas value. C'est un moyen sûr d'accès.
Peut-on stocker des types valeur (comme Integer) dans un Dictionary comme TValue et obtenir null pour une clé manquante ?
Non. Pour un type valeur, la valeur par défaut pour le type est renvoyée (0 pour Integer), mais l'accès via l'indexeur déclenchera toujours une exception en l'absence de la clé.
Accès au dictionnaire par index sans vérification préalable se répète à plusieurs endroits — plantages de programme fréquents.
Avantages :
Inconvénients :
Utilisation généralisée de TryGetValue, tous les accès sont protégés, les cas d'absence de clé sont gérés logiquement.
Avantages :
Inconvénients :