Delphi记录的TList

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

解决方法

最简单的方法是创建您自己的TList的后代。以下是一个简单的示例控制台应用程序:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,Classes;

type
  PMyRec=^TMyRec;
  TMyRec=record
    Value: Integer;
    AByte: Byte;
  end;

  TMyRecList=class(TList)
  private
    function Get(Index: Integer): PMyRec;
  public
    destructor Destroy; override;
    function Add(Value: PMyRec): Integer;
    property Items[Index: Integer]: PMyRec read Get; default;
  end;

{ TMyRecList }

function TMyRecList.Add(Value: PMyRec): Integer;
begin
  Result := inherited Add(Value);
end;

destructor TMyRecList.Destroy;
var
  i: Integer;
begin
  for i := 0 to Count - 1 do
    FreeMem(Items[i]);
  inherited;
end;

function TMyRecList.Get(Index: Integer): PMyRec;
begin
  Result := PMyRec(inherited Get(Index));
end;

var
  MyRecList: TMyRecList;
  MyRec: PMyRec;
  tmp: Integer;
begin
  MyRecList := TMyRecList.Create;
  for tmp := 0 to 9 do
  begin
    GetMem(MyRec,SizeOf(TMyRec));
    MyRec.Value := tmp;
    MyRec.AByte := Byte(tmp);
    MyRecList.Add(MyRec);
  end;

  for tmp := 0 to MyRecList.Count - 1 do
    Writeln('Value: ',MyRecList[tmp].Value,' AByte: ',MyRecList[tmp].AByte);
  WriteLn('  Press Enter to free the list');
  ReadLn;
  MyRecList.Free;
end.

这消除了一些东西:

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

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

@H_404_2@ @H_404_2@

猜你在找的Delphi相关文章