任何想法为什么这种行为是不同的?为什么Dictionary [index]抛出KeyNotFoundException但Hashtable [index]不会?
回答
这是answer。
主要的原因解释 抛出的是,有没有“错误” 价值的作品在任何V. 哈希表能够返回null ,因为关键是始终引用 类型。
值得注意的是:'HashTable'允许以这种方式编写unsafer代码。 'var ht = new Hashtable(){{“A”,null}}; string aVal =(string)ht [“A”]; string bVal =(string)ht [“B”];'Both return'null',您不能区分有效值或不存在的键。至少这个bug是隐藏和沉默的,甚至更糟,字典会告诉你一个例外。 – 2017-10-20 12:36:23
因此,字典[键]的值存储空值和键不存在时间之间不会有歧义。如果存储null或者该键不存在,Hashtable [键]将返回null。
词典抛出的主要原因是政治 - 有几个选项来保持效率和易用性。它实际上提供了一个方法(TryGetValue),清楚地表明所谓的“无法”返回合理价值的声明是错误的。然而,TryGetValue会强制使用特别尴尬的语法来完成索引器可以轻松完成的工作。
C#模板为构建引用和值语义的单独实现提供了简单的方法,还有两个其他工具可用于无限处理由临时值和某些运算符(默认值和空值)使用的值为semantice的缺失对象。这意味着没有理由打破哈希表的语义。
这是一个长期的政治斗争之间的集合学术概念,坚持每个人都必须经过“你有它”的检查和现实生活中的事实,这种人为过程效率低下,打破线程安全 - 原则上(它通过使访问非原子来破坏安全实现的线程安全性)。
我希望'TryXX'模式指定该方法应该在失败的情况下返回'default(T)',但使用'outbool'参数来指示它是否工作。这将允许'书确定; var theValue = myDict.TryGetValue(myKey,out ok);如果(好)...'。这样的模式将允许类型推断和协方差,并且还促进了不存在的关键字的期望行为假设值为'default(T)'的情况。 – supercat 2013-07-24 21:56:41
- 1. C#Ordered dictionary index
- 2. 为什么z-index:-1;出现在z-index上方:1;?
- 3. 'index'和'list-index'有什么区别
- 4. `git checkout-index -u`或`--index`做什么?
- 5. 为什么z-index不起作用?
- 6. 为什么z-index不适用于div?
- 7. .index()函数为什么不起作用?
- 8. 为什么我缺少模板mobile/home/index,application/index?
- 9. 为什么当您将Index指定为操作时,@ Url.Action不会输出索引?
- 10. 为什么用z-index 0元件被示出上述元件用z-index 1
- 11. marklogic中element-range-index和field-range-index有什么不同?
- 12. 为什么会抛出NullPointerException?
- 13. 为什么会抛出NullPointerException?
- 14. 为什么会抛出ClassCastException?
- 15. 为什么会抛出IllegalMonitorStateException?
- 16. 为什么会抛出OutOfMemoryException?
- 17. 为什么会抛出java.lang.classCastException
- 18. 为什么会抛出OOM?
- 19. 为什么会抛出IndexOutOfBoundsException?
- 20. 为什么会抛出IndexOutOfBoundsException?
- 21. C++为什么会抛出?
- 22. 为什么会抛出NullReferenceException?
- 23. 为什么会抛出StringIndexOutOfBoundsException?
- 24. Adapter.getItem(index)返回什么值?
- 25. 这条语句背后的逻辑是什么:for(--index; index> = 0; --index)?
- 26. 为什么z-index忽略位置:static?
- 27. 为什么异常不会被抛出?
- 28. 为什么null.equals(null)不会抛出NullPointerException
- 29. 为什么FileOutputStream不会抛出OutOfMemoryException
- 30. 为什么事务不会抛出TimeoutException?
想知道相同的X-) – 2009-11-09 21:58:28