0

なぜこれがコンパイルされないのですか?

(カスタム 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);

何か案は ?ありがとうございました

OK、私が持っているものは:

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;
   

など、同じコードを持つ Type/Field のペアごとに、 RTTI を使用して Data.Field を TObjectList に割り当てられるようにしたいと考えています。


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/

Unit : uqBitAPITypes.pas プロシージャ TqBitObjectListInterceptor.StringReverter(Data: TObject; Field, Arg: string);

4

0 に答える 0