¿Por qué los diccionarios no solo devuelven null
cuando se utiliza una clave no válida para indexar en la colección?clave no válida en el diccionario
13
A
Respuesta
25
Debido diccionarios genéricos podrían contener instancias de un tipo de valor, y nulo no es válido para un tipo de valor. Por ejemplo:
var dict = new Dictionary<string, DateTime>();
DateTime date = dict["foo"]; // What should happen here? date cannot be null!
En su lugar, debe utilizar el método TryGetValue del diccionario:
var dict = new Dictionary<string, DateTime>();
DateTime date;
if (dict.TryGetValue("foo", out date)) {
// Key was present; date is set to the value in the dictionary.
} else {
// Key was not present; date is set to its default value.
}
Además, un diccionario que almacena los tipos de referencia seguirá siendo almacenar valores nulos. Y su código podría considerar que "el valor es nulo" para ser diferente de "la clave no existe".
3
Microsoft decidió que =)
Haga una comprobación en línea para evitar eso.
object myvalue = dict.ContainsKey(mykey) ? dict[mykey] : null;
5
3
Razón práctica: porque un diccionario podría almacenar un valor nulo. No podría diferenciar este caso con una excepción en su escenario.
2
Cuestiones relacionadas
- 1. Deseleccionar clave de carga no válida Error, '{'
- 2. cPickle.UnpicklingError: clave de carga no válida
- 3. La clave proporcionada no es válida API de Google clave
- 4. PHP openssl_public_encrypt "parámetro clave no es una clave válida"
- 5. obtener el valor por el diccionario clave
- 6. diccionario Python retorno pidió clave si el valor no existe
- 7. Obtener la clave del diccionario utilizando el valor del diccionario
- 8. Clase personalizada utilizada como clave en el diccionario pero no se encontró la clave
- 9. Matrix como el diccionario de clave
- 10. de cifrado AES de Java Clave no válida longitud
- 11. Cambiar el nombre de una clave en el diccionario
- 12. Múltiples valores para la clave en el diccionario en Python
- 13. Rendimiento clave para un diccionario
- 14. Creación de clase anónima como clave personalizada en el diccionario
- 15. vinculando al valor en el diccionario con enum como clave
- 16. Cómo encontrar la clave mínimo en el diccionario
- 17. Valor del puntero del objeto como clave en el diccionario
- 18. Python: obtener la clave de índice en el diccionario
- 19. clave correspondiente al valor máximo en el diccionario python
- 20. Cómo evitar errores de clave nula en el diccionario?
- 21. Diccionario devolver un valor predeterminado si la clave no existe
- 22. Enfoque en la próxima vista de clave válida en iPhone
- 23. Python plantea un KeyError (para una clave fuera del diccionario) aunque la clave ESTÁ en el diccionario
- 24. C# diccionario con múltiples valores por clave
- 25. Compruebe si la clave existe en el diccionario. Si no, añádalo
- 26. Visual Studio Adición de conexiones de datos: clave dada no presente en el diccionario
- 27. ¿Qué excepción se produce cuando la clave no se encuentra en el diccionario de Python?
- 28. diccionario ordenar por longitud de clave
- 29. C# de lista como diccionario clave
- 30. C# Diccionario con dos valores por clave?
Esto no se refiere realmente la razón de la decisión de diseño; simplemente podrían haber hecho que devuelva 'default (DateTime)' en lugar de null. – Extragorey
@Extragorey Sí lo hace, en particular, la última frase: sea cual sea el valor "no encontrado", es posible que deba almacenar ese valor como significativo. Si recuperar una clave que no se encuentra devuelve 'default (DateTime)', entonces no puede distinguir entre "value is' default (DateTime) '" y "key no está presente," al menos sin una llamada adicional a ' ContainsKey() '(que duplicaría innecesariamente el costo de la operación). Para un diccionario que contiene un tipo de referencia como el valor, tal vez 'null' es un estado significativo aparte de" la clave no está presente ". – cdhowie
Gracias, esa explicación tiene más sentido. – Extragorey