在 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() 则不会抛出异常,但我想确保不存在一些隐患我只是没有看到。
——罗施勒