delphi - 如何使用 TMyRecord 中的通用子列表释放通用 TList<TMyRecord>

标签 delphi generics record generic-list

在 Windows 下的 Delphi 10 Berlin 中,我有以下关于释放通用列表的问题:

我有以下记录/列表结构:

type
  TMyRecord=record
    Value1: Real;
    SubList1: TList<Integer>;
    SubList2: TList<Real>;
  end;

  TMyListOfRecords=TList<TMyRecord>;

我想使用以下代码释放结构:
var
  i: Integer;
  AMyListOfRecords: TMyListOfRecords;
begin
  //other code

  //free AMyListOfRecords and all its content
  for i:=0 to AMyListOfRecords.Count-1 do
  begin
    AMyListOfRecords[i].SubList1.Free;
    AMyListOfRecords[i].SubList2.Free;
  end;
  AMyListOfRecords.Free;
end;

这似乎有效。但我想知道是否有更简单或更优雅的解决方案?

最佳答案

您可以将记录类型转换为类 - 开销可以忽略不计,因为记录已经包含子对象。在此类析构函数中释放子对象,并使用

 TMyListOfClasses = TObjectList<TMyClass>;

OwnsObjects = True
在这种情况下,您只需要
AMyListOfClasses.Free;

关于delphi - 如何使用 TMyRecord 中的通用子列表释放通用 TList<TMyRecord>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37548553/

相关文章:

delphi - delphi 中的匿名记录构造函数

android - Superpowered SDK : Implementing SuperpoweredRecorder. h 和设置录制路径

android MediaStore.Audio.Media.RECORD_SOUND_ACTION : no activity found to handle intent

postgresql - 如何从记录中提取值作为 postgresql 中的单独列

Delphi 的 Sharemem - 不需要时

delphi - 重新激活托盘中运行的应用程序的最佳方法是什么?

delphi - 如何在VirtualStringTree中添加不可见节点?

c# - C# 4 中会有通用属性吗?

java - 一种创建接口(interface)扩展比较器接口(interface)的方法,该接口(interface)仅比较当前子类

java - 用java实现有界泛型