如果对列表进行排序,为什么Delphi的TStringList.InsertObject()方法抛出异常?

前端之家收集整理的这篇文章主要介绍了如果对列表进行排序,为什么Delphi的TStringList.InsertObject()方法抛出异常?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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总是抛出更好.

猜你在找的Delphi相关文章