Universal TList <anyclass> Emptifier。有可能吗?</anyclass>

时间:2015-03-17 18:25:36

标签: delphi generics tlist

我经常使用TList的扩展器:TList<SomeClass1>TList<SomeClass2>等。

几乎每次都需要清空它们,删除它们存储的所有对象。

我是通过为每个特定的TList编写特定的过程来实现的。例如:

while Dirs.Count > 0 do
begin
    Dirs.Items[0].Free;
    Dirs.Delete(0);
end;

有没有办法对通用程序进行编码?像这样:

procedure EmptyAList(_List : TClass; _Object : TClass);
begin
     _Object(_List.Items[0]).Free;
     _List.Delete(0);
end;

或类似的任何东西。

1 个答案:

答案 0 :(得分:7)

使用TObjectList<T>代替TList<T>TObjectList<T>TList<T>后代,默认情况下拥有并销毁存储的对象。

您所要做的就是确保其OwnsObjects属性为true(默认为默认值),然后您可以调用其Clear()方法自动释放所有包含的对象。例如:

Dirs: TObjectList<SomeClass>;
...
Dirs.Add(SomeObject);
...
Dirs.Clear;

TObjectList<T> documentation