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