¿Alguna idea de por qué este comportamiento es diferente?¿Por qué Dictionary [index] arroja KeyNotFoundException pero Hashtable [index] no?
Respuesta
Aquí está el answer.
La razón principal Diccionario lanza es que no hay valor "error" que funciona sobre cualquier V. tabla hash es capaz de devolver null porque la clave es siempre una referencia tipo.
Merece la pena señalar: 'HashTable' permite escribir código no seguro de esta manera. 'var ht = new Hashtable() {{" A ", null}}; cadena aVal = (cadena) ht ["A"]; string bVal = (string) ht ["B"]; 'Ambos devuelven' null', no se puede diferenciar entre un valor válido o una clave no existente. Al menos el error está oculto y en silencio, lo que es aún peor, el diccionario te dirá con una excepción. –
De modo que no habrá ambigüedades entre cuando el valor del diccionario [clave] almacena un valor nulo y cuando la clave no existe. Hashtable [tecla] devolverá nulo si almacena nulo o la clave no existe.
La razón principal por la que Dictionary arroja es política: tenía varias opciones para preservar la eficiencia y la facilidad de uso. En realidad, proporciona un método (TryGetValue) que demuestra claramente que las afirmaciones sobre la supuesta "incapacidad" para devolver el valor razonable son falsas. Sin embargo, TryGetValue obliga a la sintaxis distintivamente torpe a hacer exactamente lo que el indexador podría haber hecho fácilmente.
Las plantillas C# proporcionan una forma sencilla de construir implementaciones separadas para la semántica de referencia y valor y hay otras dos facilidades para el manejo sin interrupciones de objetos faltantes con valor semántico utilizados por tempates y algunos operadores (por defecto y nulable). Lo que significa que no había una razón racional para romper la semántica de la tabla hash.
Es una lucha política a largo plazo entre la noción académica de una colección que insiste en que todo el mundo tiene que someterse a comprobaciones de "lo tienes" y hechos reales que dicho procedimiento artificial es ineficaz y rompe la seguridad del hilo. (rompe la seguridad de subprocesos de implementaciones que de otro modo serían seguras al hacer que los accesos no sean atómicos).
Deseo que el patrón 'TryXX' especifique que el método debe devolver' default (T) 'en caso de error, pero use un parámetro' out bool' para indicar si funcionó. Esto permitiría 'reservar bien; var theValue = myDict.TryGetValue (myKey, sale bien); si (ok) ... '. Tal patrón permitiría tanto la inferencia de tipo como la covarianza, y también facilitaría el caso donde el comportamiento deseado para una clave inexistente es asumir un valor de 'default (T)'. – supercat
- 1. ¿Por qué z-index no funciona para div?
- 2. Otro java.lang.IndexOutOfBoundsException, pero index <tamaño
- 3. ¿Por qué este SQL da como resultado Index Scan en lugar de Index Search?
- 4. Hashtable vs Dictionary
- 5. whoosh index viewer
- 6. Todo sobre .... Z-Index?
- 7. RavenDB MultiMap Index
- 8. Cálculo h-index
- 9. Cambiando Z-Index onclick
- 10. SQL Server Index ¿Qué debería agruparse?
- 11. z-index no comportarse como yo esperaría
- 12. ¿Por qué usar string :: iterator en lugar de index?
- 13. ¿LINQ funciona en Index?
- 14. ¿Qué hace el enlace rel = "index"?
- 15. Mysql index configuration
- 16. jQuery .each() index?
- 17. ¿Cómo ordenar Windows por z-index?
- 18. MySQL index ralentizar consulta
- 19. Facelets repeat Tag Index
- 20. Undefined index en PHP
- 21. Java ArrayList Index
- 22. z-index de CSS no funciona
- 23. JavaScript for loop index raregeness
- 24. Z-index en Internet Explorer no funciona
- 25. Tab Index en Windows Forms
- 26. NewSequentialId en UniqueIdentifier Index agrupado
- 27. IE8: después de z-index
- 28. Dictionary/HashTable Object in C++?
- 29. Access zoo or xts index
- 30. jQuery y CSS - Z-index
Me gustaría saber lo mismo X-) –