Как я могу изменить значение ключа в Delphi TDictionary или TObjectDictionary?

Могу ли я изменить ключ в TDictionary, не меняя значения?

Чтобы объяснить, я использую TObjectDictionary, который является производным от TDictionary в модуле Delphi XE Generics.Collections. Все в порядке, за исключением того, что мне также нужно иметь возможность изменять значение ключа для сохраненного объекта.

Моя первая попытка следующая:

MyObject := MyDictionary.Items[OldKeyValue];
MyDictionary.Remove(OldKeyValue);
MyDictionary.Add(NewKeyValue, MyObject);

Проблема в том, что Remove () вызывает освобождение объекта. Я попытался выполнить AddOrSetValue, чтобы сначала изменить значение на nil, но это тоже объект Free. Поскольку я сказал словарю, что они принадлежат ему, это справедливо. Однако в TObjectDictonary нет дополнительной функции, которую можно было бы удалить без Free, поэтому я перехожу к попытке изменить ключ в словаре без изменения значения. Однако я не вижу ничего похожего на это в справке по Delphi XE. Это вообще возможно? Если нет, то я вернусь к Словарю и освобожу его сам.

9
задан mj2008 8 April 2011 в 13:31
поделиться