在 Delphi 6 中,如果您尝试将一个对象插入到已排序的 TStringList(Sorted = true)中,则会抛出一个异常,警告您不允许在已排序的列表上使用 InsertObject()。如果调用 InsertObject() 必然意味着破坏了列表的排序顺序,那么我可以理解这一点。但是,考虑到 TStringList.Find() 方法:
function TStringList.Find(const S: string; var Index: Integer): Boolean;
如果将给定的字符串添加到列表中,返回一个索引,告诉您插入索引应该是什么。在使用该索引调用InsertObject()后,排序列表应该仍然保持排序状态。我已经检查了TStringList的Delphi源代码,它似乎证实了我的说法。
目前,我只是创建了一个新的TStringList子类,覆盖了InsertObject()方法,并且如果在排序列表上调用InsertObject()方法,则不会抛出异常,但我希望确保没有隐藏的危险我没有看到。
-- roschler
AddObject
,它会神奇地添加到正确的索引位置? - David Heffernan