IDictionary [index]被误用了吗?

Sib*_*Guy 1 .net c#

在我的C#编码体验期间,我看到了许多代码片段,其中使用了IDictionary [index] setter来添加新值:

var dictionary = new Dictonary<long, string>();
...
dictionary[1] = "one"; //assume we want to add new value here
Run Code Online (Sandbox Code Playgroud)

因此,不使用dictionary.Add(1,"one")开发人员通过索引器调用重写旧值(如果存在)(等于AddOrUpdate操作);

我认为当您尝试将值设置为已存在的键时,字典应该抛出异常(就像当您尝试获取非现有键时它会抛出).这是一个争论性的陈述,但我想将我的观点与你的观点进行比较.

Jon*_*eet 6

让两个成员做同样事情会有什么意义?

如果要将字典有效地用作关联数组,请按照与数组相同的方式进行分配,请使用索引器.如果你想要一个更加"保护"的字典添加,请使用Add.

使索引器抛出现有条目会使其行为与其他集合(如数组和列表)的索引器完全不同.

(编辑:请注意,当你尝试获取一个没有给出值的条目时,字典索引器的行为已经略有不同了.在某些方面,这与访问超出范围的索引相同, 我想...)