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.