【发布时间】:2011-02-21 15:47:22
【问题描述】:
在我的 C# 编码经验中,我看到了很多使用 IDictionary[index] setter 添加新值的代码:
var dictionary = new Dictonary<long, string>();
...
dictionary[1] = "one"; //assume we want to add new value here
因此,开发人员通过索引器调用(等于 AddOrUpdate 操作)重写旧值(如果存在),而不是使用 dictionary.Add(1, "one");
我认为当您尝试将值设置为已经存在的键时,字典应该抛出异常(就像您尝试获取不存在的键时抛出的异常一样)。这是一个有争议的陈述,但我想将我的观点与你的观点进行比较。
【问题讨论】:
-
这似乎是一个完全主观的问题,没有实际的理性依据。 90% 的情况下,当您想将某些东西放入地图时,您需要
AddOrUpdate,所以我完全赞成使用最简单的语法来表示该操作。附:Dictionary抛出异常很糟糕。正确的 API 是将结果作为 (value exists?, value) 的元组返回,但 C# 让这很痛苦。