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;