更新如何在C5集合中工作?

时间:2012-05-29 18:08:34

标签: c# collections c5

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

例如,假设我有一个集合,我想用A替换项目B。我希望它会像:

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

但相反,Update只接受一个参数,而documentation则包含以下内容:

  

bool Update(T x)如果集合包含相等的项,则返回true   到x,在这种情况下该项被x替换;否则返回   false而不修改集合。如果有任何项目更新,和   集合已设置语义或DuplicatesByCounting为false,   然后只更新x的一个副本;但如果收藏有包   语义和DuplicatesByCounting是真的,然后是旧的所有副本   项目已更新。如果任何项目已更新,则事件ItemsRemoved,   ItemsAdded和CollectionChanged被引发。引发阅读 -   如果集合是只读的,则为OnlyCollectionException。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

我认为您需要通过两个单独的操作来完成此操作:

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

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

答案 1 :(得分:0)

如果基于相等性(使用哈希注意事项)匹配目标,则集合中的为“更新”d。它不是“替换”。也就是说,“Update”方法中的隐式名词指的是特定的项而不是HashSet本身。

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

参见“Equality and comparison”(2.1)和HashSet构造函数(6.10)部分。

快乐的编码。