![]() |
TList generische Liste Fehler beim deklarieren RTTI
Moin zusammen,
ich komm einfach nich drauf was ich falsch mache. Hintergrund: ich habe ein Array of Record, dieses möchte ich gern in einer procedure durchlaufen also myRec[0].eigenschaft1 myRec[0].eigenschaft2 ... Nun bin ich durch längere Suche auf die generischen ![]() Allerdings bekomm ich einen Compilerfehler :/
Delphi-Quellcode:
Was mach ich also falsch ?!
uses Classes;
... type TZuordnung = record Zuorndungsname :string; trennzeichen :string; Zuordnungsdatei :string; distributor :string; ... end; type Tar_Zuordnung = array of Tzuordnung; type TlstZuordnung = Tlist<TZuordnung>; //compiler wirft Fehler raus: "undeklarierter Bezeichner 'Tlist' '1' in Zeile..." end; verwende Delphi2010 VIELEN dank ;) hab ich bei der suche nirgens gefunden =) |
AW: TList generische Liste Fehler beim deklarieren
Zitat:
Delphi-Quellcode:
uses
Generics.Collections, Generics.Defaults; |
AW: TList generische Liste Fehler beim deklarieren
Wenn du eh schon ein array hast, warum das nicht an die Prozedur übergeben?
|
AW: TList generische Liste Fehler beim deklarieren
ich frage mich grade ob das überhaupt möglich ist mit der Tlist was ich vorhabe.
Zitat:
sowas in der art:
Delphi-Quellcode:
ist das mit dem Array oder mit der Tlist erreichbar ?
//PSEUDO-Code
for i:=0 to myRec[0].countPropertys -1 do property := Myrec[0][i]; // gibt eigenschaft 1 dann 2 dann 3 etc aus |
AW: TList generische Liste Fehler beim deklarieren
Ja, mit RTTI:
Delphi-Quellcode:
uses
Rtti, TypInfo; procedure PrintStuff(const Item: TMyRecord); var ctx: TRttiContext; t: TRttiType; f: TRttiField; p: TRttiProperty; begin t := ctx.GetType(TypeInfo(TMyRecord)); if Assigned(t) then begin for f in t.GetFields do begin if f.Visibility in [mvPublic..mvPublished] then Writeln(f.Name + ' = ' + f.GetValue(@Item).ToString); end; for p in t.GetProperties do begin if p.Visibility in [mvPublic..mvPublished] then Writeln(p.Name + ' = ' + p.GetValue(@Item).ToString); end; end; end; |
AW: TList generische Liste Fehler beim deklarieren
Vielen Dank @Stevie
Genau sowas habe ich Gesucht! Funktioniert einwandfrei =) |
AW: TList generische Liste Fehler beim deklarieren RTTI
Wieso macht du eigentlich aus TZuordnung keine Klasse?
Du hast ja wahrscheinlich Prozeduren/Funktionen, die mit den Inhalten von TZuordnung arbeiten. Grundlage von OOP ist ja, dass Daten und Programmcode der mit diesen Daten arbeitet zu einem "Paket" zusammengeschnürt werden und das ist eben eine Klasse. |
AW: TList generische Liste Fehler beim deklarieren RTTI
Zitat:
|
AW: TList generische Liste Fehler beim deklarieren RTTI
OOP ist mir schon geläufig aber genau wie Uwe es schon gesagt hat, geht es in meinem Fall nur mit dem Record besser =)
|
AW: TList generische Liste Fehler beim deklarieren RTTI
Zitat:
Die drei Punkte in deinem Record deuten ja an, dass es dort noch mehr Daten gibt. Bei sehr kleinen Records, z.B. nur x,y,z-Koordinaten, hat ein Record absolut seine Berechtigung. Wenn es aber mehr Daten werden, dann muss es zwangläufig auch mehr Code geben, der mit den Daten arbeitet. Das verlangt dann nach einer Klasse. Ich muss nur immer wieder feststellen dass selbst altgediente Hasen manchmal nicht beweglich genug sind vom Record auf eine Klasse zu wechseln. Sehr häufig wird auch der Fehler begangen, dass der Record quasi identisch ist mit der Struktur, mit der Daten geladen & gespeichert werden. Damit wird aber die Veränderung der Software stark behindert. Bei einer Klasse gäbe es dagegen die Methoden LoadFromStream() und SaveToStream(). So kann die interne Repräsentation der Daten effektiv von der externen Repräsentaion auf einem Speichermedium entkoppelt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 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 by Thomas Breitkreuz