通用 TList<AnyClass> 清空器。可能吗?

Universal TList<AnyClass> Emptifier. Is it possible?

我经常使用 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;

或任何类似的东西。

使用 TObjectList<T> 而不是 TList<T>TObjectList<T>TList<T> 后代,默认拥有和销毁存储的对象。

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

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

TObjectList<T> documentation