Einzelnen Beitrag anzeigen

AndyDF

Registriert seit: 6. Sep 2006
Ort: Allgäu
99 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Spring4d IList<TObject> in IList<IObject> konvertieren

  Alt 29. Sep 2016, 13:44
Hatte einen ähnlichen Fall und habe den Code gerade mal auf deine Bedürfnisse anpgepasst. Das müsste funktionieren:
Delphi-Quellcode:
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;
Ist aber schon ein kleiner Hack. Als "T" sollte natürlich dann wirklich auch nur ein Interface angegeben werden.

Aufruf dann so:

MyInterfaceList := TMyConverter.ConvertList<IMeinObject>(MeineObjectList);

Aber wie bereits erwähnt: Aufpassen wenn sowohl Object als auch Interface Referenzen verwendet werden.
Andreas Blenk

Geändert von AndyDF (29. Sep 2016 um 13:47 Uhr)
  Mit Zitat antworten Zitat