如果对列表进行排序,为什么Delphi的TStringList.InsertObject()
发布时间:2020-12-15 04:25:03 所属栏目:大数据 来源:网络整理
导读:在Delphi 6中,如果您尝试将对象插入到已排序的TStringList(Sorted = true),则会抛出异常,警告您在排序列表上不允许使用InsertObject().如果调用InsertObject()必然意味着破坏列表的Sorted顺序,我可以理解这一点.但鉴于TStringList.Find()方法: function TSt
在Delphi 6中,如果您尝试将对象插入到已排序的TStringList(Sorted = true),则会抛出异常,警告您在排序列表上不允许使用InsertObject().如果调用InsertObject()必然意味着破坏列表的Sorted顺序,我可以理解这一点.但鉴于TStringList.Find()方法:
function TStringList.Find(const S: string; var Index: Integer): Boolean; 返回一个索引,告诉你如果给定字符串添加到列表中的插入索引应该是什么,使用该索引调用InsertObject()应该在操作后保持排序列表仍然按排序顺序.我已经检查了TStringList的Delphi源代码,它似乎证实了我的断言. 现在我只是为TStringList创建一个新的子类,它覆盖了InsertObject(),并且如果在排序列表中调用了InsertObject(),则不会抛出异常,但我想确保没有一些隐藏的危险我我只是没有看到. – roschler 解决方法
您应该在排序列表上调用AddObject.
如果InsertObject检查了排序列表上的“正确”索引,那么您将面临测试噩梦:在某些情况下,您的代码似乎可以正常工作,但如果输入数据发生更改,则会突然开始抛出异常.或者,如果InsertObject忽略了Index参数,那么它的行为将非常不直观. 如果列表已排序,则InsertObject总是抛出更好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |