我的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的初学者,但这确实令人困惑。
答案 0 :(得分:8)
你的第二个例子在功能上与第一个例子不同。
第一个例子很好。该函数使用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;