如何从Delphi函数返回数组?

Joe*_*Joe 23 arrays delphi

我的应用程序中有一个需要返回数组的函数.我已经在几个地方找到了如何通过声明数组类型来做到这一点,例如

type
  TStringArray = array of string; 
Run Code Online (Sandbox Code Playgroud)

然后宣布我的功能

function SomeFunction(SomeParam: Integer): TStringArray;
Run Code Online (Sandbox Code Playgroud)

我的问题是尝试以具有接口和实现的形式设置它.如何声明我的类型并在界面中具有该类型的函数声明?

And*_*and 34

unit Unit1;

interface

uses SysUtils;

type
  TStringArray = array of string;

function SomeFunction(SomeParam: integer): TStringArray;

...

implementation

function SomeFunction(SomeParam: integer): TStringArray;
begin
  SetLength(result, 3);
  result[0] := 'Alpha';
  result[1] := 'Beta';
  result[2] := 'Gamma';
end;

...

end.
Run Code Online (Sandbox Code Playgroud)

黄金法则是单元的接口部分描述单元使用的数据类型,以及驻留在单元中的类型,类和功能(它们的签名).这是所有其他单位看到的.实现部分包含类和函数的实现.这对于ohter单位是不可见的.其他单位需要关心单位的界面,本单位和外部单位签署的"合同",而不是实施部分中的"实施细节".


Wou*_*ick 14

如果你的Delphi是最近的,你不需要声明一个新的类型,通过声明它TArray<String>.

从上面的答案中复制并粘贴的示例:

unit Unit1;

interface

function SomeFunction(SomeParam: integer): TArray<String>;

implementation

function SomeFunction(SomeParam: integer): TArray<String>;
begin
  SetLength(result, 3);
  result[0] := 'Alpha';
  result[1] := 'Beta';
  result[2] := 'Gamma';
end;

end.
Run Code Online (Sandbox Code Playgroud)

  • `TArray&lt;T&gt;`(以及一般的泛型)并非没有问题,所以要小心。 (2认同)