Historia de la pregunta
Con la aparición de .NET Framework, Visual Basic obtuvo una estructura de almacenamiento de pares clave-valor segura en términos de tipo y de alto rendimiento: Dictionary(Of TKey, TValue). Este es el contenedor asociativo estándar para búsqueda rápida.
Problema
Trabajar con el diccionario a menudo causa errores: intentar acceder a un valor a través de una clave que no existe genera una excepción. Además, a menudo se confunden las operaciones de adición, modificación y adición de nuevos valores.
Solución
Para acceder a los valores, se utilizan el indexador o los métodos TryGetValue, ContainsKey. Para evitar la excepción KeyNotFoundException, siempre realice una verificación explícita:
Ejemplo de código:
Dim dict As New Dictionary(Of String, Integer)() dict.Add("one", 1) dict("two") = 2 ' Añadir un nuevo par If dict.ContainsKey("three") Then Console.WriteLine(dict("three")) ' No producirá error Else Console.WriteLine("Clave no encontrada") End If Dim value As Integer = 0 If dict.TryGetValue("one", value) Then Console.WriteLine(value) End If
Características clave:
¿Es cierto que dict("clave") siempre añade un nuevo par clave-valor?
No. Si la clave existe, el valor se actualiza. Si no existe, se añade el par. Para añadir con error si la clave existe, use Add.
¿Lanzará TryGetValue una excepción si la clave no está?
No. Devolverá False sin lanzar una excepción y no cambiará el value. Este es un método seguro de acceso.
¿Se puede almacenar en Dictionary tipos de valor (por ejemplo, Integer) como TValue y aún así obtener null para una clave faltante?
No. Para el tipo de valor, se devuelve el valor por defecto para el tipo (0 para Integer), pero el acceso a través del indexador aún lanzará una excepción si la clave no está.
Acceso al diccionario por índice sin verificación previa se duplica en diferentes lugares — caídas periódicas del programa.
Ventajas:
Desventajas:
Aplicación extensiva de TryGetValue, todas las llamadas están protegidas, los casos de ausencia de clave se gestionan lógicamente.
Ventajas:
Desventajas: