【发布时间】:2011-08-01 12:49:33
【问题描述】:
我可以在不更改值的情况下更改 TDictionary 中的键吗?
为了解释,我使用了一个 TObjectDictionary,它是从 Delphi XE Generics.Collections 单元中的 TDictionary 派生的。这一切都很好,除了我还需要能够更改存储对象的键值。
我的第一次尝试如下:
MyObject := MyDictionary.Items[OldKeyValue];
MyDictionary.Remove(OldKeyValue);
MyDictionary.Add(NewKeyValue, MyObject);
这个问题是 Remove() 导致对象被释放。我尝试做一个 AddOrSetValue 首先将值更改为 nil,但这也是 Free 的对象。既然我已经告诉字典它拥有它们,这很公平。尽管 TObjectDictonary 中没有额外的功能可以在没有 Free 的情况下删除,所以我因此尝试在不改变值的情况下更改字典中的键。但是,我无法在 Delphi XE 帮助中看到任何看起来会执行此操作的内容。这可能吗?如果没有,我会回到使用字典并自己释放它。
【问题讨论】: