Delphi记录的TList

前端之家收集整理的这篇文章主要介绍了Delphi记录的TList前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要存储一个临时的记录列表,并认为TList将是一个很好的方法来做到这一点?但是我不确定如何做到这一点与TList,并想知道这是否是最好的,如果任何人有任何例子如何做到这一点?

解决方法

最简单的方法是创建您自己的TList的后代。以下是一个简单的示例控制台应用程序:
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils,Classes;
  7.  
  8. type
  9. PMyRec=^TMyRec;
  10. TMyRec=record
  11. Value: Integer;
  12. AByte: Byte;
  13. end;
  14.  
  15. TMyRecList=class(TList)
  16. private
  17. function Get(Index: Integer): PMyRec;
  18. public
  19. destructor Destroy; override;
  20. function Add(Value: PMyRec): Integer;
  21. property Items[Index: Integer]: PMyRec read Get; default;
  22. end;
  23.  
  24. { TMyRecList }
  25.  
  26. function TMyRecList.Add(Value: PMyRec): Integer;
  27. begin
  28. Result := inherited Add(Value);
  29. end;
  30.  
  31. destructor TMyRecList.Destroy;
  32. var
  33. i: Integer;
  34. begin
  35. for i := 0 to Count - 1 do
  36. FreeMem(Items[i]);
  37. inherited;
  38. end;
  39.  
  40. function TMyRecList.Get(Index: Integer): PMyRec;
  41. begin
  42. Result := PMyRec(inherited Get(Index));
  43. end;
  44.  
  45. var
  46. MyRecList: TMyRecList;
  47. MyRec: PMyRec;
  48. tmp: Integer;
  49. begin
  50. MyRecList := TMyRecList.Create;
  51. for tmp := 0 to 9 do
  52. begin
  53. GetMem(MyRec,SizeOf(TMyRec));
  54. MyRec.Value := tmp;
  55. MyRec.AByte := Byte(tmp);
  56. MyRecList.Add(MyRec);
  57. end;
  58.  
  59. for tmp := 0 to MyRecList.Count - 1 do
  60. Writeln('Value: ',MyRecList[tmp].Value,' AByte: ',MyRecList[tmp].AByte);
  61. WriteLn(' Press Enter to free the list');
  62. ReadLn;
  63. MyRecList.Free;
  64. end.

这消除了一些东西:

>它处理释放内存。
>你不必打破一切,使用它。

正如雷米和沃伦都说,这是一个更多的工作,因为你必须分配内存,当你添加新的记录。

猜你在找的Delphi相关文章