为什么Dictionary [index]抛出KeyNotFoundException但Hashtable [index]却没有?

时间:2009-11-09 21:54:12

标签: c# .net dictionary hashtable

知道为什么这种行为有所不同?

3 个答案:

答案 0 :(得分:18)

这是answer

  

词典的主要原因   抛出的是没有“错误”   适用于任何V的值。   Hashtable能够返回null   因为密钥总是一个参考   类型。

答案 1 :(得分:6)

因此,当dictionary [key]的值存储空值和key不存在时之间不存在歧义。如果存储为null或密钥不存在,Hashtable [key]将返回null。

答案 2 :(得分:2)

词典抛出的主要原因是政治性的 - 有几个选项来保持效率和易用性。它实际上提供了一种方法(TryGetValue),它清楚地表明声称“无法”返回合理价值的说法是错误的。然而,TryGetValue强制使用特别笨拙的语法来完成索引器可以轻松完成的任务。

C#模板为构造参考和值语义的单独实现提供了简便的方法,还有两个其他工具可以无限制地处理具有值语义的缺失对象,这些对象由tempates和一些运算符(默认和可空)使用。这意味着没有合理的理由来破坏哈希表的语义。

这是一个长期的政治斗争,一个集合的学术概念,坚持每个人都必须通过“你有它”检查和现实生活的事实,这种人工程序是低效的,并打破线程安全 - 原则上(它通过使访问非原子化来破坏其他安全实现的线程安全性。