TStringList vs TList<string>

qual è la differenza nell’utilizzo di uno standard

type 
  sl: TStringList 

rispetto all’utilizzo di un generico TList

type 
  sl: TList<string>

?

Per quanto posso vedere, entrambi si comportano esattamente lo stesso.

È solo un altro modo di fare la stessa cosa?

Ci sono situazioni in cui sarebbe meglio rispetto agli altri?

Grazie!

  • Tenta di aggiungere “Ciao” + sLineBreak + ‘Mondo’ per entrambi. Il comportamento non è lo stesso
InformationsquelleAutor Holgerwa | 2008-11-10

 

8 Replies
  1. 42
    • TStringList è un discendente di TStrings.
    • TStringList sa come ordinare stessa in ordine alfabetico.
    • TStringList è un oggetto di proprietà.
    • TStringList non rendere il codice è incompatibile con tutte le precedenti versioni di Delphi.
    • TStringList può essere utilizzato come pubblicato proprietà. (Un bug impedisce di classi generiche da essere pubblicato, per ora.)
    • Il fatto che TStringList è un discendente di TStrings è una caratteristica importante: può essere utilizzato nella VCL dove un TStrings è utilizzato. Quindi è molto comodo da usare TStrings nel codice.
    • si sta parlando di un bug che delphi versioni sono interessati? 2009-???
    • Si sta rispondendo a una risposta che cinque anni, @Bernd. Se vuoi sapere se pubblicato proprietà possono avere tipi di classi generiche, vi invito prima a provare, e in secondo luogo per postare una domanda da chiedere a questo proposito. Quando si invia la tua domanda, ci si aspetta che l’hanno provato prima, in modo da assicurarsi di segnalare la vostra esperienza, e la menzione di quale versione si sta utilizzando. Nel 2008, io, ovviamente, non si parla di qualsiasi versione nuovi di Delphi 2009.
    • Questo è un buon argomento! Non mi abilita il mio cervello. Maledizione non ci può essere un altra versione rispetto al 2009, perché con la versione in cui i prodotti generici introdotto e nessun altra versione di Delphi è stato pubblicato per la segnato in quel momento. Ma ora abbiamo documentato 😉
  2. 12

    TStringList è stato intorno per un lungo periodo di tempo in Delphi prima generici erano intorno. Pertanto, si è costruito una manciata di funzioni utili che un generico elenco di stringhe non avrebbe.

    Generici versione è solo la creazione di un nuovo tipo che è identico a TList che lavora sul tipo di Stringa. (.Add(), .Insert(), .Remove(), .Clear(), etc.)

    TStringList di base TList tipo di metodi e di altri metodi personalizzati per lavorare con le stringhe, ad esempio .SaveToFile() e .LoadFromFile()

    Se vuoi la compatibilità all’indietro, poi TStringList è sicuramente la strada da percorrere.

    Se volete migliorare la funzionalità per lavorare con una lista di Stringhe, quindi TStringList è la strada da percorrere.
    Se si dispone di alcune di codifica di base fondamentali che si desidera lavorare con un elenco di qualsiasi tipo, allora forse avete bisogno di guardare lontano da TStringList.

  3. 2
    • Come TStringList è un discendente di TStrings è compatibile con le Linee di proprietà di TMemo, Elementi di TListbox e TComboBox e altri componenti VCL.
      Così si può utilizzare
      cbList.Elementi := StringList; //chiama internamente TStrings.Assegnare

    • ma si può fare cbList.Elementi.AddStrings(ListOfString.toArray) o somethign come che. PS. La vera domanda a portare in ciò che è diverso tra TList<string> e TArray<string> 😀
  4. 2

    Probabilmente direi se vuoi la compatibilità utilizzare TStringList, e se vuoi la compatibilità (forse l’opzione per modificare l’elenco di stringhe di dire lista di Int64s in futuro) quindi andare per TList.

  5. 2

    Memoria, dal punto di vista TStringList utilizzo della memoria aumenta con le dimensioni del TObject puntatore aggiunto a ciascun elemento. TList utilizzo della memoria aumenta con le dimensioni del puntatore aggiunto a ciascun elemento. Se è necessario solo un array di stringhe, senza ricerca, in sostituzione, di cernita o associativo operazioni, una dinamica di array (array di string) dovrebbe essere sufficiente. Questo manca di una buona gestione della memoria di TStringList o TList, ma in teoria dovrebbe utilizzare meno memoria.

  6. 2

    Il TStringlist è molto versatile classe di Delfi. Ho usato (e abusato 😉 ) i suoi Oggetti di proprietà molte volte. E ‘ molto interessante per tradurre velocemente una stringa delimitata da un controllo come un TMemo e similari (TListBox, TComboBox, solo per elencare alcuni).


    Solo che non mi piace molto TList, come TStringList soddisfatto le mie esigenze, senza la necessità di trattare i puntatori (come Tlist è un elenco di valori di Puntatore).

    EDIT: ho confuso il TList(lista di puntatori) con TList (elenco generico di stringhe). Ci scusiamo per questo. Il mio punto è: TStringList è solo molto di più di un semplice elenco di stringhe.

  7. 1

    Per la maggior parte degli scopi che TStringList è stato abusato in passato, TObjectDictionary è meglio, è più veloce e non ha bisogno di ordinamento.

    Se avete bisogno di un TStrings oggetto (in genere per UI roba, dato che la VCL non utilizzare farmaci generici troppo anche per XE5) utilizzare TStringList la necessaria fusione da TObject è fastidioso, ma non incanta.

  8. 0

    TStringList è stato usato per troppo tempo e ha molti vantaggi, tutto detto da Rob Kennedy.

    L’unico vero svantaggio di una coppia di una stringa e un oggetto è la necessità di colata in oggetto per il tipo effettivo previsto e conservati in questa lista (durante la lettura) e per quanto ne so Embarcadero non fornire Delphi 2009 e fino VCL librerie con la versione generica di TStringList.

    Per superare questo limite, ho implementato tale lista per uso interno e per quasi 3 anni serve il suo scopo, così ho deciso di condividere oggi: https://github.com/t00/deltoo#tgenericstringlist

    Una nota importante – cambia la proprietà predefinita da Stringhe di Oggetti come nella maggior parte dei casi, quando un oggetto viene memorizzato in un elenco, che è anche il più accessibile proprietà di esso.

Lascia un commento