知道为什么这种行为有所不同?
答案 0 :(得分:18)
这是answer。
词典的主要原因 抛出的是没有“错误” 适用于任何V的值。 Hashtable能够返回null 因为密钥总是一个参考 类型。
答案 1 :(得分:6)
因此,当dictionary [key]的值存储空值和key不存在时之间不存在歧义。如果存储为null或密钥不存在,Hashtable [key]将返回null。
答案 2 :(得分:2)
词典抛出的主要原因是政治性的 - 有几个选项来保持效率和易用性。它实际上提供了一种方法(TryGetValue),它清楚地表明声称“无法”返回合理价值的说法是错误的。然而,TryGetValue强制使用特别笨拙的语法来完成索引器可以轻松完成的任务。
C#模板为构造参考和值语义的单独实现提供了简便的方法,还有两个其他工具可以无限制地处理具有值语义的缺失对象,这些对象由tempates和一些运算符(默认和可空)使用。这意味着没有合理的理由来破坏哈希表的语义。
这是一个长期的政治斗争,一个集合的学术概念,坚持每个人都必须通过“你有它”检查和现实生活的事实,这种人工程序是低效的,并打破线程安全 - 原则上(它通过使访问非原子化来破坏其他安全实现的线程安全性。