如何更新TList <t>中的数据?</t>

时间:2011-02-11 10:58:32

标签: delphi generics collections

我有这个记录(结构):

type
    THexData = record            
            Address : Cardinal;
            DataLen : Cardinal;
            Data    : string;    
    end;

我已经宣布了这个清单:

HexDataList: TList<THexData>;

我在列表中填写了一些数据。现在我想扫描ListHexData,有时更新 HexDataList 中的记录元素。

有可能吗?我该怎么办?

1 个答案:

答案 0 :(得分:8)

var
  Item: THexData;
... 
for i := 0 to HexDataList.Count-1 do begin
  Item := HexDataList[i];
  //update Item
  HexDataList[i] := Item;
end;

绑定是你想要修改HexDataList[i],但你不能。当我使用保存记录的TList<T>时,我实际上是子类TList<T>并将Items属性替换为返回指向项目的指针的属性,而不是副本项目。这允许进行原地修改。

修改

再次查看我的代码我意识到我实际上并没有子类TList<T>因为它太私有而无法提取指向底层数据的指针。这可能是一个很好的决定。我实际做的是实现我自己的通用列表类,这允许我在需要时自由返回指针。