Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Durch record iterieren (https://www.delphipraxis.net/204332-durch-record-iterieren.html)

Strict 19. Mai 2020 18:11

Durch record iterieren
 
Ich weiß die Frage ist bestimmt blöd aber ich kann sie nicht beantworten.
Ich habe ein ganz normales record
Delphi-Quellcode:
type TRec = record
 const
  A: string = 'A';
  B: string = 'B';
  CD: TArray<stirng> = ['C', 'D'];
end;
Gibt es eine Möglichkeit durch dieses Record zu gehen ohne extra noch einmal die Werte zu kennen?

Meine erste Idee: alles in ein Enum auslagern. Durch TRecData kann man dann iterieren... vielleicht? Und das Enum in einen String umwandeln.

Delphi-Quellcode:
type
 TRecData = (A, B, CD);

type TRec = record
 const
  A: string = TRecData.A;
  B: string = TRecData.B;
  CD: TArray<string> = [TRecData.C, TRecData.D];
end;

himitsu 19. Mai 2020 18:59

AW: Durch record iterieren
 
System.RTTI.pas (früher RTTI.pas)

prinzipiell
Delphi-Quellcode:
uses
  System.RTTI;

var
  F: TRttiField;
begin
  for F in (TRttiContext.Create.GetType(TypeInfo(TRec)) {as TRttiRecordType}).GetFields do // für Variablen aka Felder im Record
    ...
aber ich weiß/glaube nicht, ob/dass es möglich ist Konstanten aufzulisten. (für globale Konstanten und Variablen sind ja ebenfalls keine TypeInfos vorhanden)

Strict 19. Mai 2020 19:04

AW: Durch record iterieren
 
Leider funktioniert das mit Konstanten nicht.
Hier wäre der Umweg über das Enum vielleicht eine Idee, um keine wirkliche, doppelte Daten zu haben.

Raible 20. Mai 2020 15:01

AW: Durch record iterieren
 
evtl. so
allerdings ohne record

Code:
type
  TmyEnum = (A,B,C,D);

const
  myConst:array[TmyEnum] of string = ('A', 'B', 'C', 'D');


...
var u:TmyEnum;
 
for u=Low(TmyEnum) to High(TmyEnum) do
begin
  doAnythingWith(mxConst[u]);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 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