我正在尝试将一些字符串传递给动态字符串数组,在这种情况下它正在工作:
procedure DoSomeThing(in_cmd: string; var out_strs: array of string);
begin
..
for n := low(out_strs) to high(out_strs) do
begin
out_strs[n] :='bla bla';
end;
end;
在使用as:
的应用程序中.
.
.
SetLength(my_out_str, sizer);
DoSomeThing('do it now', my_out_str);
.
.
但我想在程序中 my_out_str SetLength 。 有可能吗?
答案 0 :(得分:7)
是的,这是可能的,但您必须使用先前定义的动态数组类型声明参数。您目前正在使用open array。
type
TStrDynArray = array of string;
procedure DoSomeThing(in_cmd:string; var out_strs: TStrDynArray);
begin
SetLength(out_strs, 2 * Length(inn_cmd));
...
或者,如果可用泛型(来自Delphi 2009),请使用TArray<string>
procedure DoSomeThing(in_cmd:string; var out_strs: TArray<string>);
begin
SetLength(out_strs, 2 * Length(inn_cmd));
原因是一个上下文中的array of x
与另一个上下文中的array of x
不同。
在类型声明中
type
TDynamicArray = array of string;
是动态数组类型,可以调整大小。动态数组在Delphi 4中引入。
在参数定义中
procedure Test(var X: array of string);
是open array parameter,这意味着它将接受不同大小的数组作为输入。它只需要一个指针(即引用)到第一个元素,以及数组中最后一个元素的索引。它不知道或不关心输入数组是动态数组还是静态数组,因此不允许调整长度。
打开数组参数早于Delphi 1.