Nur um sich die (für Delphi normale) Freigabe eines aggregierten Objekts im Destruktor (oder woanders) zu sparen steigt man wahrscheinlich nicht auf ein komplett neues Collection-Framework um.
Um ehrlich zu sein, war es bei mir aber ähnlich (Spring Collections sind toll).
Von einem Class Helper hast du nichts- Die gehen ja nur für Klassen, Records und einfache Typen (Integer, String, Enums, ...). Interfaces bleiben außen vor.
Ich persönlich würde meinen, dass sich es nur für die (ziemlich triviale) Eigenschaft "Summe aller Items bzgl. einer bestimmten Eigenschaft" auch nicht lohnt: In diesem speziellen Fall würde ich (ja, jedes mal) hingehen, über alle Items drüberrutschen und aufsummieren:
Delphi-Quellcode:
implementation uses Spring.Collections;
type TMyItem = class
public var länge: Double;
end;
{$R *.dfm}
procedure TForm25.FormCreate(Sender: TObject);
var
myQueue: IQueue<TMyItem>;
gesamtlänge: Double;
begin
myQueue := TCollections.CreateQueue<TMyItem>();
// [Queue mit Inhalt füllen]
gesamtlänge := 0;
myQueue.ForEach(
procedure(const item: TMyItem)
begin
gesamtlänge := gesamtlänge + item.länge;
end
);
ShowMessage( gesamtlänge.ToString() );
end;
Ansonsten habe ich ehrlich gesagt auch nie wirklich Scheu davor, einen neuen Typen für meine ganz speziellen Zwecke zu erstellen. Also
Delphi-Quellcode:
type
IMyQueue = interface(IQueue<TMyItem>)
function getGesamtlänge(): Double;
end;
TMyQueue = class( Spring.Collections.Queues.TQueue<TMyItem>, IMyQueue)
public function getGesamtlänge(): Double;
end;
Dann sind deine Container nicht mehr vom Typ
IQueue<TMyItem>
sondern
IMyQueue