name - c# summary tags
La mejor forma de manejar una KeyNotFoundException (5)
Estoy usando un diccionario para realizar búsquedas de un programa en el que estoy trabajando. Ejecuto un montón de claves en el diccionario, y espero que algunas claves no tengan ningún valor. KeyNotFoundException
justo donde ocurre, y lo KeyNotFoundException
. Todas las demás excepciones se propagarán a la parte superior. ¿Es esta la mejor manera de manejar esto? ¿O debería usar una búsqueda diferente? El diccionario usa un int como su clave y una clase personalizada como su valor.
Aquí hay una solución de una línea (tenga en cuenta que esto hace que la búsqueda se realice dos veces. Consulte a continuación la versión de prueba de este valor que se debe usar en ciclos de larga duración).
string value = dictionary.ContainsKey(key) ? dictionary[key] : "default";
Sin embargo, me veo obligado a hacer esto cada vez que accedo a un diccionario. Preferiría que vuelva nulo, así que solo puedo escribir:
string value = dictionary[key] ?? "default";//this doesn''t work
Intente usar: Dict.ContainsKey
Editar:
En cuanto al rendimiento, creo que Dictionary.TryGetValue
es mejor que otros, pero no me gusta utilizar Out cuando no tengo que hacerlo, en mi opinión, ContainsKey es más legible pero requiere más líneas de código si también necesitas el valor.
Una solución de línea utilizando TryGetValue
string value = dictionary.TryGetValue(key, out value) ? value : "No key!";
Tenga en cuenta que la variable de valor debe ser del tipo que devuelve el diccionario en esta cadena de casos. Aquí no puede usar var para declaración de variable.
Use Dictionary.TryGetValue
lugar:
Dictionary<int,string> dictionary = new Dictionary<int,string>();
int key = 0;
dictionary[key] = "Yes";
string value;
if (dictionary.TryGetValue(key, out value))
{
Console.WriteLine("Fetched value: {0}", value);
}
else
{
Console.WriteLine("No such key: {0}", key);
}
debe usar el método ''ContainsKey (clave de cadena)'' del Diccionario para verificar si existe una clave. el uso de excepciones para el flujo normal del programa no se considera una buena práctica.