【发布时间】:2016-01-14 08:52:05
【问题描述】:
在使用this[key] = newValue 实现值替换时我应该遵循接口IDictionary<TKey, TValue> 的“合同”吗?一个例子:
IDictionary<MyKey, string> dict = CreateEmptyDict();
var k1 = new MyKey(123);
var k2 = new MyKey(123);
dict.Add(k1, "foo");
dict[k2] = "bar";
k1 和 k2 是这样的 k1.Equals(k2) 并且它们具有相同的哈希码,但它们是引用类型,所以 ReferenceEquals(k1, k2) == false。
BCL Dictionary<TKey, TValue> 将包含 (k1, "bar")。
我的问题是:对于IDictionary<TKey, TValue> 的任何实现,我真的应该遵循这个“合同”吗?或者如果在底层数据结构中更容易这样做,我可以让我的实现包含(k2, "bar")?
【问题讨论】:
-
如果不确定,可以随时查看reference implementation