如何将字符串数组传递给 delphi 中的函数参数

How can I pass array of string a parameter to function in delphi

我对 Delphi 有疑问。

我写了这样一个函数:

function MyFunction(arr: array of AnsiString): Boolean;
begin
  //code here
end;

现在,当我将 AnsiString 的数组直接传递给函数时,就像这样,一切都完美无缺:

MyFunction(['one', 'two', 'three']);

但是,当我尝试像这样存储这个数组时:

var arr: array of AnsiString;

procedure MyProcedure;
begin
  arr[0] := ['one', 'two', 'three'];
  MyFunction(arr[0]);
end;

存在不匹配错误。

我是 Delphi 的初学者,但这真的很令人困惑。

您的第二个示例在功能上与第一个示例不同。

第一个例子很好。该函数将 open array 作为输入参数,您直接在该参数中构造一个固定的字符串数组,这非常好。任何数组类型都可以传递给开放数组参数。

在第二个示例中,您声明了一个 dynamic array 字符串,但您没有为数组分配任何内存,并且您试图将其第一个元素(单个字符串)分配给指向一个固定的字符串数组。然后你试图在需要数组的地方传递那个元素(同样是一个字符串)。这就是代码无法编译的原因。

编写程序的正确方法应该是这样的:

procedure MyProcedure;
var
  arr: array of AnsiString;
begin
  SetLength(arr, 3);
  arr[0] := 'one';
  arr[1] := 'two';
  arr[2] := 'three';
  MyFunction(arr);
end;

或者:

procedure MyProcedure;
var
  arr: array of AnsiString;
begin
  arr := ['one', 'two', 'three'];
  MyFunction(arr);
end;

或者:

type
  TAnsiStringArray = array of AnsiString;

procedure MyProcedure;
var
  arr: TAnsiStringArray;
begin
  arr := TAnsiStringArray.Create('one', 'two', 'three');
  MyFunction(arr);
end;