Почему метод Delphi TStringList.InsertObject () выдает исключение, если список отсортирован?

В Delphi 6 при попытке вставить объект в отсортированный список TStringList (Sorted = true) выдается исключение, предупреждающее о том, что InsertObject () не разрешен в отсортированном списке. Я мог бы понять это, если бы вызов InsertObject () обязательно означал уничтожение порядка сортировки в списке. Но учитывая, что метод TStringList.Find ():

function TStringList.Find(const S: string; var Index: Integer): Boolean;

возвращает индекс, сообщающий вам, каким должен быть индекс вставки для данной строки, если она была добавлена ​​в список, вызов InsertObject () с этим индексом должен оставить отсортированный список все еще в отсортированном порядке после операции. Я изучил исходный код Delphi для TStringList, и, похоже, он подтверждает мое утверждение.

На данный момент я просто создаю новый подкласс для TStringList, который переопределяет InsertObject () и не генерирует исключение, если InsertObject () вызывается в отсортированном списке, но я хочу убедиться, что нет скрытых опасность, которую я просто не вижу.

- roschler

6
задан Robert Oschler 24 May 2011 в 13:39
поделиться