如果我有一个动态数组并希望将其作为开放数组参数传递给函数怎么办?
procedure DoThis(const Args: array of const);
procedure DoThat(const Values: TArray<String>);
begin
DoThis(Values);
end;
我应该将动态数组转换为什么才能将其作为开放数组传递? (静态数组传输没有问题。)
你不能指定一个开放数组作为函数的结果,所以你不能用这种方式解决问题。我尝试使用 var open array 转换动态数组,但 var open array 无法设置长度。问题是我们无法控制开放数组的长度,只能使用开放数组构造函数。也许有办法直接将数据写入内存?还是别的什么?
让我强调一下,当
DoThis
会被声明为
procedure DoThis(const Args: array of string);
调用
DoThis(Values)
可以立即使用。问题出在 const
中的 array of const
。
Unit System.Rtti.pas 提供适合创建
function TValueArrayToArrayOfConst
的 array of const
,但它需要 TArray<TValue>
才能这样做。因此,要将 TArray<T>
转换为 array of const
,类似的函数可能如下所示:
type
TConvert = record
public
class function ConvertToArrayOfConst<T>(const Params: TArray<T>): TArray<TVarRec>; static;
end;
class function TConvert.ConvertToArrayOfConst<T>(const Params: TArray<T>): TArray<TVarRec>;
var
I: Integer;
begin
SetLength(Result, Length(Params));
for I := Low(Result) to High(Result) do
Result[I] := TValue.From<T>(Params[I]).AsVarRec;
end;