2

如何在C5 集合中使用更新方法?

例如,假设我有一个要替换 item 的A集合B。我希望它是这样的:

HashSet<String> s = new HashSet<String>();
s.add("A");
s.update("A", "B");

但取而代之的是,Update采用单个参数,并且文档有以下内容:

如果集合包含等于 x 的项,则 bool Update(T x) 返回 true,在这种情况下,该项被 x 替换;否则返回 false 而不修改集合。如果更新了任何项,并且集合已设置语义或 DuplicatesByCounting 为 false,则仅更新 x 的一个副本;但是如果集合具有包语义并且 DuplicatesByCounting 为真,则更新旧项目的所有副本。如果更新了任何项目,则会引发事件 ItemsRemoved、ItemsAdded 和 CollectionChanged。如果集合是只读的,则引发 ReadOnlyCollectionException。

有任何想法吗?谢谢。

4

2 回答 2

2

我认为您需要通过两个单独的操作来做到这一点:

s.Remove("A");
s.Add("B");

Update方法仅在两个项目被认为相等时才有效(两个不同的对象可以相等)。但"A""B"不相等。

于 2012-05-29T18:11:39.623 回答
0

如果目标基于相等匹配(考虑哈希),则集合中的项目是“更新”d。它不是“替换”。也就是说,“Update”方法中的隐含名词指的是一个特定的项目,而不是HashSet本身。

例如,如果 HashSet 被用作数据库缓存,则映射数据库对象的相等性可能仅涵盖主键。正如所见,“更新”对于许多琐碎的类型没有多大意义,甚至可能在用于给定HashSet 对象的特定 SGC.IEqualityComparer 之外没有多大意义。(也就是说,在这个特定的 HashSet 之外,所述数据库对象的相等性可能涵盖所有值。)

请参阅“相等和比较”部分(2.1)和 HashSet 构造函数(6.10)。

快乐编码。

于 2012-05-29T18:33:20.267 回答