Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#15

Re: Delphi-Equivalent zur C-union

  Alt 22. Jun 2005, 13:06
Zitat von Zerolith:
Also heißt: Wenn ich eine Liste habe. Die z.B. aus lauter Records mit dieser "Union-Strukutr" besteht kann ich folgendes machen:
Delphi-Quellcode:
Liste[0].Index := 1; // Integer
Liste[0].Value := 'String';
Liste[1].Index := 2;
Liste[1].Value := 325;
Liste[2].Index := 3;
Liste[2].Value := TRUE;
Liste[3].Index := 4;
Liste[3].Value := '2005-05-15 15:00:42';
Die Frage ist, als was .Value deklariert ist. Da Delphi typsicher ist, dürfte die Zuweisung nicht funktionieren.

Eine Lösung könnte so aussehen (obwohl ich die Problemstellung eher mit Klassen oder Variants lösen würde):
Delphi-Quellcode:
type
  TListEntryType = (letAString, letInteger, letBoolean);
  TListEntry = record
    Idx: Integer;
    Typ: TListEntryType;
    Val: record
      case TListEntryType of
        letAString: (AsAString: AnsiString);
        letInteger: (AsInteger: Integer);
        letBoolean: (AsBoolean: Boolean);
    end;
  end;

//...

with Liste[0] do
begin
  Idx := 1;
  Typ := letAString;
  Val.AsAString := 'String';
end;
with Liste[1] do
begin
  Idx := 2;
  Typ := letInteger;
  Val.AsInteger := 325;
end;
with Liste[2] do
begin
  Idx := 3;
  Typ := letBoolean;
  Val.AsBoolean := True;
end;
with Liste[3] do
begin
  Idx := 4;
  Typ := letInteger; // falsch, aber möglich - Beispiel um Fehlerquellen aufzuzeigen :)
  Val.AsAString := '2005-05-15 15:00:42';
end;
  Mit Zitat antworten Zitat