如何使用通用TList List属性

时间:2014-12-22 12:05:31

标签: delphi generics

DelphiXE7 Update1

在尝试使用TList.List属性时,我注意到了一种奇怪的行为。如果你看下面的代码,似乎MyList1.List返回的数组大小不正确......那么,哪里有bug?是在我的代码/头部还是在RTL中; - )

var
  MyList1, MyList2: TList<String>;
begin
  MyList1 := TList<String>.Create;
  MyList2 := TList<String>.Create;

  MyList1.Add('A');
  MyList1.Add('B');
  MyList1.Add('C');

  MyList2.AddRange(MyList1.List);   // MyList1.Count = 4 !!!!

  ShowMessage(Format('%d, %d', [MyList1.Count, MyList2.Count]));
end;

enter image description here

1 个答案:

答案 0 :(得分:3)

List属性是原始底层存储。作为减少重新分配数量的优化,该类过度分配此存储。这具有以下效果:List返回的数组可能具有比列表本身更多的元素。然后,您可以添加更多项目,而无需强制重新分配,直到达到容量。

因此可以预期这种行为。使用Count查找列表中定义的项目数。