Universal TList <AnyClass> Emptifier.可能吗?

Max*_*ith 0 delphi generics tlist

我经常使用从TList扩展:TList<SomeClass1>,TList<SomeClass2>等等.

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

我是通过为每个特定的TList编写特定的过程来完成的.例如:

while Dirs.Count > 0 do
begin
    Dirs.Items[0].Free;
    Dirs.Delete(0);
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法编写通用程序?像这样的东西:

procedure EmptyAList(_List : TClass; _Object : TClass);
begin
     _Object(_List.Items[0]).Free;
     _List.Delete(0);
end;
Run Code Online (Sandbox Code Playgroud)

或任何类似的东西.

Dal*_*kar 7

TObjectList<T>而不是TList<T>.TObjectList<T>是一个TList<T>默认拥有和销毁存储对象的后代.

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

Dirs: TObjectList<SomeClass>;
...
Dirs.Add(SomeObject);
...
Dirs.Clear;
Run Code Online (Sandbox Code Playgroud)

TObjectList<T> 文件