В 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