在使用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")
吗?