![]() |
spring4d: TList<T> in IList<T> konvertieren
Hallo zusammen,
vielleicht übersehe ich ja etwas ganz Einfaches, aber ich finde keine Funktion oder auch einen Hinweis dazu im Internet: Ich habe aus einem Framework, das ich nicht selbst im Griff habe (TMS Aurelius), immer wieder Listen im Format TList<T>. Wie kann ich diese in ihr entsprechendes Gegenüber aus spring4d konvertieren, sodass ich dann ein IList<T> habe? Geht das irgendwie "einfach" oder muss ich alle Items in eine neu erzeugte IList hinzufügen? Viele Grüße Harald |
AW: spring4d: TList<T> in IList<T> konvertieren
Delphi-Quellcode:
implementiert
System.Generics.TList<T>
Delphi-Quellcode:
nicht, es implementiert leider überhaupt keine Interfaces.
Spring.Collections.IList<T>
Dir bleibt nichts anderes übrig als es in eine neue Liste zu übertragen (mache ich auch immer so)
Delphi-Quellcode:
procedure p();
var rtlList: TList<Byte>; springList: IList<Byte>; begin rtlList := TList<Byte>.Create(); springList := TCollections.CreateList<Byte>( rtlList.ToArray() ); end; |
AW: spring4d: TList<T> in IList<T> konvertieren
Hallo Günther,
vielen Dank! Das mit dem Argument beim CreateList<T>(Argument) udn dem T.ToArray wußte ich noch nicht. Super, damit kann ich dann alles auf einen Schwung übertragen und muss nicht einzeln jedes Element hinzufügen. Muss ich denn die TList<T> wieder freigeben, auch die einzelnen Objekte, oder macht das das Interface dann selbst. Anders gefragt, werden die übergebenen Werte kopiert (vermutlich nicht), oder nur die Zeiger übergeben? Dann müsste ich nur TList freigeben und nicht alle Objekte... Stimmt das so? Es würde also so reichen:
Delphi-Quellcode:
Viele Grüße
procedure p();
var rtlList: TList<Byte>; springList: IList<Byte>; begin rtlList := TList<Byte>.Create(); springList := TCollections.CreateList<Byte>( rtlList.ToArray() ); rtlList.Free; end; Harald |
AW: spring4d: TList<T> in IList<T> konvertieren
Das kommt jetzt natürlich darauf an ob du eine Liste von Wertetypen (Bytes, Records, Integers, …) oder nicht gemanagten Referenztypen (TObject) hast.
Die TList<T> welche du aus deiner Bibliothek zurückbekommst wirst du, davon gehe ich mal aus, am besten direkt freigeben. Schau lieber noch einmal in passende Doku von "TMS Aurelius". Stecken in der Liste jetzt Objekte wirst du die natürlich auch irgendwann freigeben müssen. Es sei denn, du nimmst aus Spring nicht die IList<T> sondern die IObjectList<T> (und dementsprechend
Delphi-Quellcode:
nimmst). Die räumt die enthaltenen Objekte auch gleich mit ab wenn man sie freigibt.
TCollections.CreateObjectList<T>(..)
|
AW: spring4d: TList<T> in IList<T> konvertieren
Vielen Dank - das hat mir alles sehr viel weiter geholfen :-) und ich hab wieder was bzgl. generische Listen gelernt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz