2

C5 コレクションで更新メソッドを使用するにはどうすればよいですか?

Aたとえば、 itemをに置き換えたいセットがあるとしBます。次のようなものになると思います:

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

代わりにUpdate、単一のパラメーターを取り、ドキュメントには次のように記載されています。

bool Update(T x) は、コレクションに x に等しい項目が含まれている場合に true を返します。この場合、その項目は x に置き換えられます。それ以外の場合は、コレクションを変更せずに false を返します。いずれかのアイテムが更新され、コレクションにセマンティクスが設定されているか、DuplicatesByCounting が false である場合、x のコピーが 1 つだけ更新されます。ただし、コレクションにバッグ セマンティクスがあり、DuplicatesByCounting が true の場合、古いアイテムのすべてのコピーが更新されます。いずれかのアイテムが更新された場合、イベント ItemsRemoved、ItemsAdded、および CollectionChanged が発生します。コレクションが読み取り専用の場合、Read-OnlyCollectionException をスローします。

何か案は?ありがとう。

4

2 に答える 2

2

これは、2つの別々の操作で行う必要があると思います。

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

このUpdateメソッドは、2つのアイテムが等しいと見なされる場合にのみ機能します(2つの異なるオブジェクトが等しい場合があります)。しかし"A"、と"B"は等しくありません。

于 2012-05-29T18:11:39.623 に答える
0

セット内のアイテムは、(ハッシュを考慮して) 同等性に基づいてターゲットが一致した場合に「更新」されます。「交換」ではありません。つまり、「Update」メソッドの暗黙の名詞は、HashSet 自体ではなく、特定のアイテムを参照します。

たとえば、HashSet がデータベース キャッシュとして使用されている場合、マップされたデータベース オブジェクトの等価性は主キーのみをカバーする可能性があります。ご覧のように、「更新」は多くの自明な型ではあまり意味がなく、特定のHashSet オブジェクトに使用される特定の SGC.IEqualityComparer 以外ではあまり意味がありません。(つまり、この特定の HashSet の外では、前述のデータベース オブジェクトの等価性がすべての値をカバーする可能性があります。)

セクション「等値と比較」(2.1) および HashSet コンストラクター (6.10) を参照してください。

ハッピーコーディング。

于 2012-05-29T18:33:20.267 に答える