集合作为字典中的关键

CJe*_*CJe 1 c# dictionary

我有一个这样的字典:

var dic = Dictionary<Collection<MyObject>, string>
Run Code Online (Sandbox Code Playgroud)

然后我添加一个这样的条目:

dic.Add(myObjColl, "1");
Run Code Online (Sandbox Code Playgroud)

其中myObjColl包含单个条目

在第二次运行时,我尝试向dic添加另一个条目,其中myObjColl有两个条目(其中一个与第一次运行中的条目相同),并且我得到一个异常,即密钥已经存在.

我在这里错过了什么?我希望字典键是一个集合,当然两个具有不同条目数的集合不能相同.

编辑:发生了什么是myObjColl在foreach之外初始化并在第二次迭代期间更新.所以我认为是一个带有两个条目的新集合实际上是旧的一个条目集合,并添加了一个额外的条目.

详细说明我的问题:

我有一组产品行对象.每个都有一个产品标识对象,由一组键值对组成:

Collection<ProductKeyValuePair> productIdentification;
myProductRow.ProductIdentification = productIdentification;
Run Code Online (Sandbox Code Playgroud)

然后我必须构建另一个ProductKeyValuePairs集合,定义每个产品行对象的"所有者"(一个产品行对象可以有多个所有者),我需要将每个所有者添加到对应的procuct行对象.传统的多对多,其中公共密钥是KeyValuePairs的集合.

很难解释,但它实际上取决于在大型机上运行的旧系统返回的遗留数据,并且很可能存储在某种分层数据库中: - /

Sco*_*ain 6

字典中的键在执行作为键的角色时应该是不可变的.如果你做任何改变的值GetHashCode()或者Equals(object)你会得到不确定的行为.

(如果Collection没有实现GetHashCode()Equals(object)使用它包含的成员,它只会通过引用容器对象本身进行比较)