![]() |
Delphi-Version: 10 Seattle
Spring4d IList<TObject> in IList<IObject> konvertieren
Hallo,
meine Frage betrifft die Listen aus dem Spring-Framework: Wie kann ich eine IList<TMeinObject> zu einer IList<IMeinObjekt> konvertieren (TMeinObject implementiert IMeinObject), also aus einer Liste von konkreten Objekten eine Liste von Interfaces daraus machen? Die IList<TMeinObject> entsteht aus dem Spring-Persistence-Framework, ist daher beim Laden auf den konkreten Typ angewiesen. Gruß Rainer |
AW: Spring4d IList<TObject> in IList<IObject> konvertieren
Tja ich denke da kommst Du um das kopieren nicht herum also sowas wie
Delphi-Quellcode:
**** Aber ****
from i := 0 to ilist<Tobject>.count - 1 do
ilist<interface>.add(ilist<Tobject> as Interface); Das mixen von Object und Interface referenzen ist gefährlich. Das würde ich nur machen wenn Du 100% sicher bist was Du da tust. Wenn an irgendeiner Stelle die Objecte freigegeben werden fliegt Dir alles um die Ohren. Ich wäre da "sehr vorsichtig" Aber vieleicht meldet sich Stevie ja noch dazu |
AW: Spring4d IList<TObject> in IList<IObject> konvertieren
Hatte einen ähnlichen Fall und habe den Code gerade mal auf deine Bedürfnisse anpgepasst. Das müsste funktionieren:
Delphi-Quellcode:
Ist aber schon ein kleiner Hack. ;) Als "T" sollte natürlich dann wirklich auch nur ein Interface angegeben werden.
class function TMyConverter.ConvertList<T>(const AInputList: IList<TObject>): IList<T>;
var i: Integer; OutType: T; InterfaceGuid: TGUID; begin Result := TList<T>.Create; InterfaceGuid := GetTypeData(TypeInfo(T))^.Guid; for i := 0 to AInputList.Count-1 do begin if Supports(AInputList[i],InterfaceGuid,OutType) then Result.Add(OutType); end; end; Aufruf dann so:
Delphi-Quellcode:
MyInterfaceList := TMyConverter.ConvertList<IMeinObject>(MeineObjectList);
Aber wie bereits erwähnt: Aufpassen wenn sowohl Object als auch Interface Referenzen verwendet werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz