![]() |
ObjectList vs, Generic List Umwandlung
Mit folgendem Demo code möchte ich eine ObjectList in eine Generic Liste konvertieren. Der Compiler sagt Ok, ist diese Verfahren dann auch OK ?
Delphi-Quellcode:
Einschränkungen / Randbedingungen die ich beachten muss? In die objectList füge ich nur Elemente der Class TMyTestClass einunit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Types, Data.Win.ADODB, Generics.Collections, contnrs, Vcl.StdCtrls; type TMyTestClass = class myName : String; myNumber : Integer; end; TMyObjectList =class( TObjectList) end; TGenericTestList = TList<TMyTestClass>; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function DoSomething_with_TObjectList ( aMyObjectList : TMyObjectList) : boolean; begin // ..... result := true; end; function DoSomething_with_TGenericList ( aGenericTestList : TGenericTestList) : boolean; begin // ..... result := true; end; procedure TForm1.Button1Click(Sender: TObject); var MyObject: TMyTestClass; MyList: TMyObjectList; MyGenericTestList : TGenericTestList; Begin MyObject := TMyTestClass.Create; MyList := TMyObjectList.Create(True); MyList.Add(MyObject); MyGenericTestList := TGenericTestList.create; MyGenericTestList.Add (MyObject); //operating code.... DoSomething_with_TObjectList( TMyObjectList( MyGenericTestList)); DoSomething_with_TGenericList( TGenericTestList ( MyGenericTestList)); MyList.Free; end; end |
AW: ObjectList vs, Generic List Umwandlung
Zitat:
|
AW: ObjectList vs, Generic List Umwandlung
TObjectList und TList<T> sind binär komplett inkompatibel und damit dürfte
Delphi-Quellcode:
zur Laufzeit dezent gegen die Wand klatschen.
DoSomething_with_TObjectList
|
AW: ObjectList vs, Generic List Umwandlung
habe halt viele Funktionen im Projekt die noch mit TObject Liste als Übergabeparameter arbeiten, wollte mir eigentlich das "Listen Kopieren& umwandeln" schenken, was wären denn die eleganteste Lösung für diese Problem
|
AW: ObjectList vs, Generic List Umwandlung
Beste (und *spoiler* zukunftssichere) Lösung ist, sich von Klassen aus Contnrs.pas zu verabschieden.
Die Alternative, die aber mehr schlecht als recht wäre, da in beiden Klassen die entscheidenden Methoden nicht virtual sind, einen Adapter zu bauen. Eine andere wäre, nicht die generischen Klassen aus Generics.Collections zu nehmen, sondern eine eigene von TObjectList abzuleiten. |
AW: ObjectList vs, Generic List Umwandlung
Eine generische Liste spart ja eigentlich "nur" Schreibarbeit.
Man braucht dann nicht prüfen, welche Objekte in einer Liste stehen und kann auf das Casten der Einträge verzichten. M.E. bringt es also nichts, bestehenden Projekte und/oder Funktionen komplett umzustellen. Für die Zukunft generische Listen zu verwenden ist dann aber eine gute Entscheidung (es sei denn, man arbeitet viel mit der RTTI und will dynamisch mit den Listen und Klassen arbeiten). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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