TValue: Dieses Array kann man aber nicht an ein array of const
übergeben?
Nicht direkt, aber über eine Schleife lässt sich natürlich einfach wieder ein
array of TVarRec
aufbauen:
Delphi-Quellcode:
type
TRec = record
private
function GetAsVarRecs: TArray<TVarRec>;
public
Params: array of TValue;
constructor Create(const AParams: array of const);
property AsVarRecs: TArray<TVarRec> read GetAsVarRecs;
end;
constructor TRec.Create(const AParams: array of const);
var
I: Integer;
begin
SetLength(Params, Length(AParams));
for I := Low(AParams) to High(AParams) do begin
Params[I] := AParams[I];
end;
end;
function TRec.GetAsVarRecs: TArray<TVarRec>;
var
I: Integer;
begin
SetLength(result, Length(Params));
for I := Low(Params) to High(Params) do begin
result[I] := Params[I].AsVarRec;
end;
end;
procedure Test(const Fmt: string; const Args: array of const);
var
rec: TRec;
S: string;
begin
rec := TRec.Create(Args);
S := Format(Fmt, rec.AsVarRecs);
Assert(S = Format(Fmt, Args));
end;