【发布时间】:2011-05-26 22:40:26
【问题描述】:
我的应用程序中有一个函数需要返回一个数组。我在几个地方找到了如何通过声明数组类型来做到这一点,例如
type
TStringArray = array of string;
然后声明我的函数
function SomeFunction(SomeParam: Integer): TStringArray;
我的问题是尝试以同时具有接口和实现的形式进行设置。如何声明我的类型并在接口中使用该类型进行函数声明?
【问题讨论】:
-
“字符串数组”在 Delphi 中通常被认为是“不惯用的”。 TStringList 通常是首选。
-
我通常使用“DynArray”后缀来命名此类类型定义,以便区分动态数组和静态数组:
TStringDynArray = array of string; TStringArray = array[0..(maxInt div sizeof(string))-1] of string;但没有官方约定。跨度> -
@Warren P:请注意,作为 XE RTL 一部分的新
FileIO单元广泛使用TStringDynArray。所以我不同意这不是惯用的。特别是如果您想返回数组并使用枚举器循环遍历它,这非常方便(参见TDirectory.GetFiles示例)。 -
@Warren P:还有一点:返回
TStringList更不习惯,因为它违反了“创造者负责破坏”的原则 -
这个约定的意义何在?我发现
for FileName in TDirectory.GetFiles do ...比StrList := TStringList.Create; try TDirectory.GetFiles (StrList); for FileName in StrList do ... finally StrList.Free; end;优雅得多,数组方法有什么缺点吗?否则没有理由不使用它恕我直言