Вопрос

в чем разница в использовании стандарта

type 
  sl: TStringList 

по сравнению с использованием общего TList

type 
  sl: TList<string>

?

Насколько я могу видеть, оба ведут себя совершенно одинаково.

Это просто другой способ сделать то же самое?

Есть ли ситуации, когда одна была бы лучше другой?

Спасибо!

Это было полезно?

Решение

  • TStringList является потомком TStrings.
  • TStringList знает, как сортировать себя по алфавиту.
  • TStringList имеет свойство Objects.
  • TStringList не делает ваш код несовместимым со всеми предыдущими версиями Delphi.
  • TStringList можно использовать как опубликованное свойство.(На данный момент ошибка не позволяет публиковать универсальные классы.)

Другие советы

TStringList существовал в Delphi задолго до появления дженериков.Таким образом, он создал несколько полезных функций, которых не было бы в общем списке строк.

Версия generics просто создает новый тип, идентичный TList, который работает с типом String .(.Добавить (), .Вставить(), .Удалить(), .Очистить() и т.д.)

TStringList содержит базовые методы типа TList и другие методы, настраиваемые для работы со строками, такие как .SaveToFile() и .LoadFromFile()

Если вам нужна обратная совместимость, то TStringList - это определенно правильный путь.
Если вам нужна расширенная функциональность для работы со списком строк, то TStringList - это то, что вам нужно.Если у вас есть некоторые базовые основы кодирования, и вы хотите работать со списком любого типа, то, возможно, вам нужно отвернуться от TStringList.

  • Поскольку TStringList является потомком TStrings, он совместим со свойством Lines TMemo, элементами TListBox и TComboBox и другими компонентами VCL.Так что можете использовать cbList.Элементы := Список строк;// внутренне вызывает TStrings.Назначить

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

С точки зрения памяти использование памяти TStringList увеличивается с увеличением размера указателя TObject, добавляемого к каждому элементу.Использование памяти TList увеличивается с увеличением размера указателя, добавляемого к каждому элементу.Если необходим просто массив строк без операций поиска, замены, сортировки или ассоциативных операций, динамического массива (array of string) должно быть как раз достаточно.При этом не хватает хорошего управления памятью TStringList или TList, но теоретически должно использоваться меньше памяти.

TStringList - это один из очень универсальных классов Delphi.Я использовал (и злоупотреблял ;-) ) его свойство Objects много раз.Очень интересно быстро перевести строку с разделителями в элемент управления, подобный TMemo и подобным (TListBox, TComboBox, просто перечислю некоторые).

Мне просто не очень нравится TList, поскольку TStringList удовлетворял моим потребностям, не требуя обработки указателей (поскольку Tlist - это список значений указателя).

Редактировать:Я перепутал TList (список указателей) с TList (общий список строк).Извините за это.Моя точка зрения остается в силе:TStringList - это намного больше, чем простой список строк.

Для большинства целей, которыми TStringList злоупотребляли в прошлом, TObjectDictionary лучше - он быстрее и не требует сортировки.

Если вам нужен объект TStrings (обычно для пользовательского интерфейса, поскольку VCL не часто использует дженерики даже для XE5), используйте TStringList - требуемое приведение из TObject раздражает, но не останавливает показ.

TStringList использовался слишком долго и имеет много преимуществ, все упомянутые Робом Кеннеди.

Единственным реальным недостатком его использования в качестве пары строки и объекта является необходимость приведения объекта к фактическому типу, ожидаемому и сохраняемому в этом списке (при чтении), и, насколько я знаю, Embarcadero не предоставлял библиотеки Delphi 2009 и выше VCL с универсальной версией TStringList.

Чтобы преодолеть это ограничение, я внедрил такой список для внутреннего использования, и в течение почти 3 лет он служит своей цели, поэтому я решил поделиться им сегодня: https://github.com/t00/deltoo#tgenericstringlist

Одно важное замечание - это изменяет свойство по умолчанию со строк на Объекты, поскольку в большинстве случаев, когда объект хранится в списке, к нему также чаще всего обращаются.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top