Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Objekte vom Typ TList, Frage dazu (https://www.delphipraxis.net/205873-objekte-vom-typ-tlist-frage-dazu.html)

KarllerntDelphi 26. Okt 2020 12:56

Objekte vom Typ TList, Frage dazu
 
Hallo,

ich habe mir zwei (unterschiedliche) Records definiert und möchte diese
als generische Liste verarbeiten.
Dazu habe ich sie folgendermassen definiert:

ListeRec1 = Tlist<Rec1>;
ListeRec2 = TList<Rec2>;

Dazu dann zwei Variable
liRec1 : ListeRec1;
liRec2 : ListeRec2;

und diese erzeugt:

liRec1:=ListeRec1.create;
liRec2:=ListeRec2.create;

Ich möchte nun die beiden Variablen jeweils an eine gemeinsame Prozedure übergeben und dort
befüllen lassen.

Procedure fuelle_list(var liste : liRec1),
begin
fuelle die Liste;
end;

Dazu bräuchte ich aber zwei unterschiedliche prozeduren, was ich unschön finde,
da beide im grunde das gleiche machen nur mit unterschiedlichen Listen(Records).
Lieber wäre mir ich könnte immer die gleiche Prozedur aufrufen und jeweils die eine oder ander Liste übergeben und
in der Prozedur irgendwie die jeweilige Liste ansprechen. Ich denke ich müsste einen "generischen" Typ angeben
aber meine Versuche dahingehend waren bisher fruchtlos....
Geht das in Delphi und wenn ja, wie ?

Danke

Karl

Klaus01 26. Okt 2020 13:00

AW: Objekte vom Typ TList, Frage dazu
 
.. nur ein Gedanke

Delphi-Quellcode:
Procedure fuelle_list(var liste : TList<T>),
begin
fuelle die Liste;
end;
Grüße
Klaus

mkinzler 26. Okt 2020 13:01

AW: Objekte vom Typ TList, Frage dazu
 
Die beiden Typen müssen den selben Vorfahren haben.

KarllerntDelphi 26. Okt 2020 13:18

AW: Objekte vom Typ TList, Frage dazu
 
Klaus,

Wenn ich Tlist<T> angebe habe ich ja wieder das gleiche Problem ,
denn ich müsste dann jeweils TList<Rec1) order TList<Rec2> angeben.
Was ich bräuchte ware ein allgemeines Tlist aber da sagt der Compiler :

[dcc32 Fehler] test.pas(85): E2010 Inkompatible Typen: 'TList' und 'System.Generics.Collections.TList<AtoDData.Rec1>'

Schade.
Karl.

himitsu 26. Okt 2020 13:19

AW: Objekte vom Typ TList, Frage dazu
 
Bei VAR müssen es sogar die selben Typen sein.

Aber VAR ist garnicht nötig, da nur der Inhalt, aber nicht die Instanz der Liste geändert werden soll,
also ja, dann reicht ein gemeinsamer Vorfahre. (auch wenn es bei diser Art Genrics nicht leicht wird ... außer mit TObjectList<T>, da diese "kompatible" T haben müssen)

Oder auch die Funktion Methode generisch
Delphi-Quellcode:
procedure TXyz.fuelle_list<T>(Liste: TList<T>);
// bzw.
procedure TXyz<T>.fuelle_list(Liste: TList<T>);

Andreas13 26. Okt 2020 15:04

AW: Objekte vom Typ TList, Frage dazu
 
Willkommen im Club Karl,
Du kannst Deinen QuellCode hier mit Hilfe des Delphi-Symbols (= Helm mit rotem Kamm gleich über der ersten Zeile im Editor) richtig formatieren, damit er besser lesbar ist.
Gruß, Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz