Как работает обновление в коллекции C5?
Как использовать метод обновления в коллекции C5?
Например, допустим, у меня есть набор, где я хочу заменить элемент A
с B
, Я ожидаю, что это будет что-то вроде:
HashSet<String> s = new HashSet<String>();
s.add("A");
s.update("A", "B");
но вместо этого, Update
принимает один параметр, и в документации есть следующее:
bool Update (T x) возвращает true, если коллекция содержит элемент, равный x, и в этом случае этот элемент заменяется на x; в противном случае возвращает false без изменения коллекции. Если какой-либо элемент был обновлен, а в коллекции задана семантика, или DuplicatesByCounting имеет значение false, то обновляется только одна копия x; но если у коллекции есть семантика мешка, а DuplicatesByCounting имеет значение true, то все копии старого элемента обновляются. Если какой-либо элемент был обновлен, то генерируются события ItemsRemoved, ItemsAdded и CollectionChanged. Выдает исключение ReadCollectionCollectionException, если коллекция доступна только для чтения.
Есть идеи? Благодарю.
2 ответа
Я думаю, что вам нужно сделать это с двумя отдельными операциями:
s.Remove("A");
s.Add("B");
Update
Метод работает, только если два элемента считаются равными (два разных объекта могут быть равны). Но "A"
а также "B"
не равны
Элементом в наборе является "Обновление" d, если цель соответствует на основе равенства (с учетом хеш-функции). Это не "Заменить". То есть неявное существительное в методе "Update" относится к конкретному элементу, а не к самому HashSet.
Например, если HashSet используется в качестве кэша базы данных, равенство сопоставленного объекта базы данных может охватывать только первичный ключ. Как видно, "обновление" не имеет особого смысла для многих тривиальных типов и может даже не иметь особого смысла вне конкретного SGC.IEqualityComparer, используемого для данного объекта HashSet. (То есть вне этого конкретного HashSet равенство указанного объекта базы данных может охватывать все значения.)
См. Раздел "Равенство и сравнение" (2.1) и конструктор HashSet (6.10).
Удачного кодирования.