Delphi - Универсальный тип как параметр

Почему это не компилируется?

(Код из настраиваемого перехватчика JSON)

      procedure myproc(MyObject: TObject);

  procedure test(C: TClass);
  begin
    var ctx := TRttiContext.Create;
    var typ := ctx.GetType(C);
    for var fld in typ.GetFields do
    begin
      if fld.Name = 'anyfield' then
      begin
         TObjectList<Fld.ClassType>.Create(True);
      end;
    end;
    typ.Free;
    ctx.Free;
  end;

begin
  Test( MyOrgObject );
end;

что-то не так с: TObjectList <Fld.ClassType> .Create (True);

Любые идеи ? Спасибо

Хорошо, что у меня есть:

      procedure TqBitObjectListInterceptor.StringReverter(Data: TObject; Field, Arg: string);
begin   
  if (Data is TqBitLogsType) and (Field = 'Flogs') then
  begin
    TqBitLogsType(Data).Flogs := TObjectList<TqBitLogType>.Create(True);
  end else
  if (Data is TqBitPrefsType) and (Field = 'Flist') then
  begin
    TqBitPrefsType(Data).Flogs := TObjectList<TqBitPrefsType>.Create(True);
  end else... 
end;
   

и так далее для каждой пары Тип / Поле с тем же кодом, я хотел бы иметь возможность назначить Data.Field TObjectList с помощью RTTI:

      
procedure TqBitObjectListInterceptor.StringReverter(Data: TObject; Field, Arg: string);

  function Convert(C: TClass; F: string): boolean;
  if (Data is C) and (Field = F) then
  begin
    var ctx := TRttiContext.Create;
    var typ := ctx.GetType(Data);
    for var fld in typ.GetFields do
    begin
      if fld.Name = F then
      begin
        fld.SetValue( TObjectList<C>.Create(True) );
      end;
       TObjectList<C>.Create(True); <<<<<
      end;
    end;
    typ.Free;
    ctx.Free;
    Result := True;
  end;
  
begin
  Convert(TqBitLogsType, 'Flogs');
  Convert(TqBitPreferenceType, 'Flist');
end;

Для справки: https://sourceforge.net/p/qbitvcl/code/HEAD/tree/trunk/

Модуль: uqBitAPITypes.pasprocedure TqBitObjectListInterceptor.StringReverter(Data: TObject; Field, Arg: string);

0 ответов

Другие вопросы по тегам