对通过引用传递到proc的数组执行SetLength

csh*_*tor 16 delphi

当然,即使我能做到这一点......

var
  testarray : array of string;

setlength(testarray, 5);
Run Code Online (Sandbox Code Playgroud)

但是如果我想变得聪明并且有一个程序我通过这样的referance传递数组我无法做到!

procedure DoStuffWithArray(var passedarray : array of string);
begin
  setlength(passedarray, 5);
end;
Run Code Online (Sandbox Code Playgroud)

编译器在我的proc中的单行代码中说"不兼容的类型".

如果我在调用proc之前执行setlength,我可以在数组上执行其他内容,例如set set element values,但是我不能在proc中执行setlength,这就是我想要做的.

非常感谢任何帮助,谢谢大家.

Mas*_*ler 17

作为参数的数组类型需要具有名称.所以:

type TStringArray = array of string;
procedure DoStuffWithArray(var passedarray: TStringArray);
Run Code Online (Sandbox Code Playgroud)

然后它会工作.

但是如果你需要一个动态大小的字符串组,你可能会发现TStringList更容易使用.

  • @Csharpdefetor - 如果你喜欢梅森的答案(这是一个很好的答案)那么你应该接受它.你也会得到代表奖金. (2认同)
  • 这是由于Delphi语法中的历史怪癖,因为它对开放数组参数使用相同的语法.请参阅http://stackoverflow.com/questions/2112729/biggest-delphi-nitpicks/2113650#2113650 (2认同)