Я пытаюсь написать функцию, которая принимает любой TList и возвращает строковое представление всех элементов TList.
Я попробовал такую функцию, как
function ListToString(list:TList<TObject>):String;
Это отлично работает, за исключением того, что вы не можете передать ему TList<String>
.
E2010 Incompatible types: 'TList<System.TObject>' and 'TList<System.string>'
В Delphi строка не является объектом. Чтобы решить эту проблему, я написал вторую функцию:
function StringListToString(list:TList<string>):String;
Это единственное решение? Существуют ли другие способы рассматривать строку как «объектоподобную»?
В том же духе я также хотел написать функцию «равно», чтобы сравнить два списка TL. Я снова сталкиваюсь с той же проблемой
function AreListsEqual(list1:TList<TObject>; list2:TList<TObject>):boolean;
Есть ли способ написать эту функцию (возможно, с использованием обобщений?), Чтобы она также могла обрабатывать TList<String>
? Есть ли какие-то другие приемы или «лучшие практики», о которых я должен знать при попытке создать код, который обрабатывает как строки, так и объекты? Или я просто создаю две версии каждой функции? Могут ли дженерики помочь?
Я из Java, но сейчас работаю в Delphi. Кажется, в последнее время они добавляют в Delphi много вещей из мира Java (или, возможно, из мира C #, который скопировал их из Java). Как добавление equals () и hashcode () к TObject, а также создание универсальной структуры Collections и т. Д. Мне интересно, насколько эти дополнения очень практичны, если вы не можете использовать с ними строки.
[править: кто-то упомянул TStringList. Я использовал это до сих пор, но я спрашиваю о TList. Я пытаюсь понять, является ли использование TList для всего (включая строки) более чистым способом.]