编写一个FreeAll函数的最佳方法是什么,该函数将获取TList<T>列表的每个元素的泛型和免费?
这是不合理的,TList<T>.FreeAll因为如果泛型类型是Record或String则没有意义.然而,如果泛型类型是一个对象,如果有某种方法可以实现FreeAll功能,那将非常方便.
我的简单尝试不能编译......
TTest1 = Class
End;
Procedure FreeAll(List : TList<TObject>);
Var
I : Integer;
Begin
For I := 0 To List.Count - 1 Do
List[I].Free;
End;
Procedure Main;
Var
List : TList<TTest1>;
I : Integer;
Begin
List := TList<TTest1>.Create;
List.Add(TTest1.Create);
List.Add(TTest1.Create);
List.Free;
FreeAll(List);
List.Free;
End;
Run Code Online (Sandbox Code Playgroud)
在相同的Generics.collections.pas单元中,您有TObjectList,OwnsObjects属性可能就是您要查找的内容(例如,将OwnsObject设置为true,调用Clear方法并正确释放所有列出的对象).
或者您可以编写自己的TList(或者可能是TObjectList)后代,您可以将其添加为方法.