Frage

Was ist der Unterschied einen Standard bei der Verwendung

type 
  sl: TStringList 

im Vergleich zu einem generischen TList mit

type 
  sl: TList<string>

Soweit ich sehen kann, beide verhalten sich genau das gleiche.

Ist es nur ein weiterer Weg, um die gleiche Sache zu tun?

Gibt es Situationen, in denen man besser als die anderen sein?

Danke!

War es hilfreich?

Lösung

  • TStringList ist ein Nachkomme von TStrings.
  • TStringList weiß, wie sich alphabetisch zu sortieren.
  • TStringList hat eine Eigenschaft Objects.
  • TStringList nicht machen Sie Ihren Code nicht kompatibel mit allen vorherigen Versionen von Delphi.
  • TStringList kann als published-Eigenschaft verwendet werden. (Ein Fehler verhindert, dass generische Klassen von veröffentlicht werden, für jetzt.)

Andere Tipps

TStringList hat um eine lange Zeit in Delphi gewesen, bevor Generika um waren. Daher ist es eine Hand voll von nützlichen Funktionen aufgebaut, das eine generische Liste von Strings nicht hat.

Die Generika-Version schafft nur eine neue Art, die identisch mit TList ist, die von der Art des String funktioniert. (.Add (), .Insert (), .Remove (), .Clear () usw.)

TStringList hat die grundlegenden TList Typen Methoden und andere Methoden benutzerdefinierten mit Streichern, wie .SaveToFile () und .LoadFromFile ()

zu arbeiten

Wenn Sie die Rückwärtskompatibilität wollen, dann TStringList ist definitiv der Weg zu gehen.
Wenn Sie erweiterte Funktionalität wollen mit einer Liste von Strings für die Arbeit, dann ist TStringList der Weg zu gehen. Wenn Sie einige grundlegende Codierung Grundlagen, die Sie mit einer Liste von jeder Art arbeiten wollen, dann müssen Sie vielleicht wegzuschauen von TStringList.

  • Wie TStringList ein Nachkomme von TStrings ist es kompatibel mit der Eigenschaft Lines von TMemo, Artikel von TListBox und TComboBox und anderen VCL-Komponenten. So verwenden können   cbList.Items: = String; // ruft intern TStrings.Assign

Ich würde wahrscheinlich sagen, wenn Sie Rückwärtskompatibilität Verwendung TStringList wollen, und wenn Sie Vorwärtskompatibilität wollen (vielleicht die Möglichkeit, dass die Liste von Strings ändern sagen Liste des Int64s in der Zukunft) dann für TList gehen.

Von Speicherpunkt von TStringList Speicherauslastung Ansicht wird mit der Größe von TObject Zeigern auf jedes Element hinzugefügt erhöht. TList Speichernutzung wird mit der Größe des Zeigers auf jedes Element hinzugefügt erhöht. Bei Bedarf ist nur ein Array von Zeichenfolgen ohne Suchen, Ersetzen, Sortieren oder assoziative Operationen, ein dynamisches Array (Array von string) sollte gerade ausreichend sein. Dies fehlt eine gute Speicherverwaltung von TStringList oder TList, aber in der Theorie sollte weniger Speicher.

Der TStringList ist eine sehr vielseitige Klasse von Delphi. Früher habe ich (und missbraucht ;-)) seine Eigenschaft Objects viele Male. Es ist sehr interessant, um schnell eine begrenzte Zeichenfolge an eine Steuer wie ein TMemo und ähnlichen zu übersetzen (TListBox, TComboBox, um nur einige zu nennen).

Ich mag es einfach nicht viel TList, wie TStringList meine Bedürfnisse befriedigt, ohne Zeiger benötigen, um die Behandlung von (als Tlist eine Liste der Zeigerwerte).

EDIT: Ich verwirrte den TList (Liste von Zeigern) mit TList (generischer Liste von Strings). Das tut mir leid. Mein Punkt steht. TStringList ist einfach viel mehr als eine einfache Liste von Strings

Für die meisten Zwecke, die TStringList in der Vergangenheit missbraucht wurde, TObjectDictionary ist besser -. Es schneller ist und Sortierung nicht braucht

Wenn Sie ein TStrings-Objekt (in der Regel für UI stuff, da die VCL Generika nicht viel nutzen, auch für XE5) verwenden TStringList -. Der erforderliche Guss von TObject ärgerlich ist aber kein Hemmschuh

TStringList hat viel zu lange verwendet worden und hat viele Vorteile, erwähnt von Rob Kennedy.

Der einzige wirkliche Nachteil es als ein Paar von einer Zeichenkette verwenden und ein Objekt ist die Notwendigkeit, Objekt der tatsächlichen Art von Casting zu erwarten und in dieser Liste gespeichert (beim Lesen) und soweit ich weiß, Embarcadero hat Delphi nicht bieten 2009 und bis VCL-Bibliotheken mit generischer Version von TStringList.

diese Einschränkung zu überwinden ich eine solche Liste für den internen Gebrauch und für fast 3 Jahren umgesetzt dient es seinen Zweck, so habe ich beschlossen, es heute zu teilen: https://github.com/t00/deltoo#tgenericstringlist

Eine wichtige Anmerkung -. Es ändert sich die Standardeigenschaft von Strings auf Objekte wie in den meisten Fällen, wenn das Objekt in einer Liste gespeichert ist, es ist auch die meist zugegriffen Eigenschaft davon

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top