在我的C#编码经历中,我看到很多代码片段,其中使用了IDictionary [index] setter来添加新值:
var dictionary = new Dictonary<long, string>();
...
dictionary[1] = "one"; //assume we want to add new value here
因此,不使用dictionary.Add(1,“one”)开发人员通过索引器调用重写旧值(如果存在)(等于AddOrUpdate操作);
我认为当您尝试将值设置为已存在的键时,字典应该抛出异常(就像当您尝试获取非现有键时它会抛出)。这是一个争论性的陈述,但我想将我的观点与你的观点进行比较。
答案 0 :(得分:6)
让两个成员完全一样做是什么意思?
如果要将字典有效地用作关联数组,请按照与数组相同的方式进行分配,使用索引器。如果您想要对字典添加更多“防护”,请使用Add
。
使索引器抛出现有条目会使其行为与其他集合(如数组和列表)的索引器完全不同。
(编辑:请注意,当你尝试获取一个没有给出值的条目时,字典索引器的行为已经略有不同了。在某些方面,这是与访问超出范围的索引相同,我想......)
答案 1 :(得分:0)
这绝对是一个意见问题,我个人更喜欢现有的行为。没有什么能阻止您创建实现IDictionary<TKey,TValue>
的自定义类型并提供您正在寻找的行为。
答案 2 :(得分:0)
为什么会这样?至于我,这是正常的行为。 你想如何更新字典中的值?据我了解你,开发人员应该删除这个keyvaluepair,而不是只在字典中添加新的keyvaluepair,不是吗?