¿Debo verificar si una clave particular está presente en el Diccionario si estoy seguro de que se agregará en el diccionario cuando llegue al código para acceder?¿Debo verificar si una determinada clave está presente en el Diccionario antes de acceder a ella?
Hay dos maneras en que puedo acceder al valor en el diccionario de
- comprobar método ContainsKey. Si devuelve verdadero, entonces accederé usando indexer [key] del objeto del diccionario.
o
- TryGetValue que devolverá verdadero o falso, así como valor de retorno a través de parámetro de salida.
(segundo llevará a cabo mejor que primero si quiero obtener el valor. Benchmark.)
Sin embargo, si estoy seguro de que la función que está accediendo diccionario mundial seguramente tendrá la llave y después ¿Todavía comprobar usando TryGetValue o sin verificar debería usar indexer [].
¿O nunca debería asumir eso y siempre verificar?
Una clave faltante es a menudo una indicación de otro problema. Si sabe cuál es el problema y puede proporcionar un mensaje más útil, entonces debería considerar lanzar su propia excepción ya que el mensaje que acompaña a 'KeyNotFoundException' es difícil de restringir a veces. –
Sería ciertamente útil si KeyNotFoundException también proporcionara la clave, pero aparte de eso, basta con que el rastro de la pila sea suficiente para mí. ¿Qué tan lejos tomaría esto: verificando todas las referencias nulas posibles (no solo argumentos, sino cosas que internamente espera que sean no nulas) para la nulidad y lanzando una excepción personalizada en cada una de ellas? Siempre habrá excepciones arrojadas por fragmentos del marco en casos de inconsistencia interna: si intenta anticipar cada una de ellas, el código termina siendo más sobre los casos de error que de progreso. –