TStringlist Object nach Aufzählungstyp casten [gelöst]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

TStringlist Object nach Aufzählungstyp casten [gelöst]

Beitrag von corpsman »

Hallo Zusammen,

folgender Code ergibt bei mir eine Fehlermeldung:

Code: Alles auswählen

Procedure TForm1.Button1Click(Sender: TObject);
Type
  TBlub = (b1, b2, b3);
Var
  sl: TStringList;
  value: TBlub;
Begin
  sl := TStringList.Create;
  sl.AddObject('1', TObject(b1));
  sl.AddObject('2', TObject(b2));
  sl.AddObject('3', TObject(b3));

  value := TBlub(sl.Objects[1]); // Unsicher, geht aber auch net
  value := sl.Objects[1] as TBlub; // -- geht net
  sl.free;

End;  
Anscheinend kann man TBlub nach TObject casten, aber zurück geht es nicht. Weiß jemand hier im Forum wie man das richtig hin bekommt ?
Zuletzt geändert von corpsman am Di 1. Feb 2022, 13:06, insgesamt 1-mal geändert.
--
Just try it

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: TStringlist Object nach Aufzählungstyp casten

Beitrag von six1 »

ohne, dass ich das jetzt probiert habe:
Dein "value" sollte doch vom Typ Integer sein, oder? Du greifst ja auf einen Wert der Aufzählung zu und möchtest nicht das ganze Objekt zurück haben...
Gruß, Michael

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: TStringlist Object nach Aufzählungstyp casten

Beitrag von fliegermichl »

Mit einem doppelten Cast sollte es gehen.

Code: Alles auswählen

 value := TBlub(PtrUInt(sl.Objects[0]));
Edit: Gerade getestet. So geht's. Bei Integer warnt der Compiler. Weil das nur bei 32 Bit funktioniert. PtrUInt geht immer.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: TStringlist Object nach Aufzählungstyp casten [gelöst]

Beitrag von corpsman »

Danke, sieht komisch aus, aber geht tatsächlich ...
--
Just try it

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: TStringlist Object nach Aufzählungstyp casten [gelöst]

Beitrag von PascalDragon »

corpsman hat geschrieben:
Di 1. Feb 2022, 09:26
Anscheinend kann man TBlub nach TObject casten, aber zurück geht es nicht. Weiß jemand hier im Forum wie man das richtig hin bekommt ?
Zusätzlich zu dem, was die anderen geschrieben haben: der as-operator erwartet, falls auf der linken Seite eine Klassenvariable ist, auf der rechten Seite eine Klasse oder ein Interface. Ein Enumerationstyp ist hier schlichtweg falsch.
FPC Compiler Entwickler

Antworten