如何在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。
有什么想法吗?感谢。
答案 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)部分。
快乐的编码。