【发布时间】:2018-08-15 01:13:21
【问题描述】:
在编写测试程序时,我遇到了这个示例代码:
var MyData: TArray<TDataRec>;
procedure AppendData(AItem: TOrderByCustomer);
var i: Integer;
tmp: TArray<TOrderByCustomer>;
begin
SetLength(tmp, Length(MyData)+1);
for i:=0 to High(MyData) do
tmp[i]:=MyData[i];
tmp[Length(tmp)-1]:=AItem;
MyData:=tmp;
end;
过去我只是简单地使用 SetLength() 来更改实际数组的长度。为什么这个示例的作者创建了一个临时数组,然后将所有值分配给它并将其复制回原始数组?这是有充分的理由吗,还是他只是怪怪的?
【问题讨论】:
-
他一直很奇怪。
-
确实,作者可能不知道这些东西到底是怎么工作的。
-
如果您要向数组中添加大量项目,则应该使用更灵活的容器,例如
TList<T>。 -
FWIW,这行不通,除非 TDataRec 和 TOrderByCustomer 属于同一类型。我认为这是一个捏造的例子,而不是真实的代码?
标签: delphi