Skip to main content
 首页 » 编程设计

c#之集合作为字典中的键

2024年01月22日32tuyile006

我有这样一本字典:

var dic = Dictionary<Collection<MyObject>, string> 

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

dic.Add(myObjColl, "1"); 

其中 myObjColl 包含单个条目

在第二次运行时,我尝试向 dic 添加另一个条目,其中 myObjColl 有两个条目(其中一个与第一次运行中的条目相同),但我得到一个异常,指出 key 已经存在。

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

编辑: 发生的事情是 myObjColl 在 foreach 之外初始化,并在第二次迭代期间更新。因此,我认为包含两个条目的新集合实际上是添加了一个额外条目的旧条目集合。

详细说明我的问题:

我有一组产品行对象。每个都有一个由键值对集合组成的产品标识对象:

Collection<ProductKeyValuePair> productIdentification; 
myProductRow.ProductIdentification = productIdentification; 

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

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

请您参考如下方法:

字典中的键在发挥键的作用时应该是不可变的。如果您更改 GetHashCode() 或 Equals(object) 的值,您将获得未定义的行为。

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