Aua, da kannst du dir aber schöne Speicherlecks mit erstellen
Ist ein Argument, ich kopier das am ende in ein TArray<String> um und geb die Liste selber frei
Das mit TValue krieg ich aber irgendwie nicht hin, ich hab eine rekursiv aufgerufene Methode die wie folgt aussieht:
Delphi-Quellcode:
procedure TWrapVariable<T>.DoConvertToString(const Lvl: Integer; const x: TVariable<T>; const ALst: TStringList);
var
i: Integer;
iVi: TVariable<Integer>;
iVf: TVariable<Single>;
iVs: TVariable<AnsiString>;
iVb: TVariable<Boolean>;
s: String;
begin
if Length(x.FVarArr)=0 then
begin
if (fVarType = gicInteger) then
begin
x.AsVariable(iVi);
s:= TValue.From<TVariable<T>>(x).AsString; // comiled zwar wirft aber eine EInvalidCast
fToStrBuffer := fToStrBuffer + Format('%d,', [iVi.FValue]);
end
else if (fVarType = gicFloat) then
begin
x.AsVariable(iVf);
fToStrBuffer := fToStrBuffer + Format('%1.5f,', [iVf.FValue]);
end
....
end;
for i := Low(x.FVarArr) to High(x.FVarArr) do
begin
DoConvertToString(Lvl+1, x.FVarArr[i] As TVariable<T>, ALst);
end;
if (Length(x.FVarArr) <> 0) Or (Lvl=0) then
begin
ALst.Add(fToStrBuffer);
fToStrBuffer := '';
end;
end;
weiter hinten wird dann über das interne fVarArr iteriert und im anschluß der fToStrBuffer-String der Stringliste
hinzugefügt.