Da außen die Variable NIL werden soll, das aber beim Property "Objects" nicht geht, macht es sich mit "einer" Funktion nicht so gut.
Delphi-Quellcode:
procedure FreeStringList(const [ref] List: TStrings);
procedure Walk(Obj: TObject);
begin
if Obj is TStrings then
for var Obj2 in TStrings(Obj).ToObjectArray do
Walk(Obj2);
Obj.Free;
end;
begin
// wie FreeAndNil : modern, typsicher mit CONST-REF -> https://dalijap.blogspot.com/2020/06/magic-behind-freeandnil.html
var Temp := List;
TObject(Pointer(@List)^) := nil;
Walk(Temp);
end;
bzw.
Delphi-Quellcode:
procedure FreeStringList(var List{: TStrings});
procedure Walk(Obj: TObject);
var
i: Integer;
begin
if Obj is TStrings then
for i := TStrings(Obj).Count-1 downto 0 do
Walk(TStrings(Obj).Objects);
Obj.Free;
end;
var
Temp: TStrings;
begin
// wie FreeAndNil : alt, mit VAR im Funktionskopf
Temp := TStrings(List);
List := nil;
Walk(Temp);
end;