2009-11-09 57 views

回答

16

这是answer

主要的原因解释 抛出的是,有没有“错误” 价值的作品在任何V. 哈希表能够返回null ,因为关键是始终引用 类型。

+0

值得注意的是:'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

6

因此,字典[键]的值存储空值和键不存在时间之间不会有歧义。如果存储null或者该键不存在,Hashtable [键]将返回null。

2

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

C#模板为构建引用和值语义的单独实现提供了简单的方法,还有两个其他工具可用于无限处理由临时值和某些运算符(默认值和空值)使用的值为semantice的缺失对象。这意味着没有理由打破哈希表的语义。

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

+2

我希望'TryXX'模式指定该方法应该在失败的情况下返回'default(T)',但使用'outbool'参数来指示它是否工作。这将允许'书确定; var theValue = myDict.TryGetValue(myKey,out ok);如果(好)...'。这样的模式将允许类型推断和协方差,并且还促进了不存在的关键字的期望行为假设值为'default(T)'的情况。 – supercat 2013-07-24 21:56:41

相关问题