Rtti werkt niet met generieke typen die worden gebruikt als klassenvelden

Ik had problemen met het gebruik van rtti om informatie te krijgen over klassenvelden van een generiek type. Na behoorlijk wat googleing vond ik een vermelding in QC beschrijven het probleem. Mijn vraag is, of iemand een tijdelijke oplossing kent, of als dit Delphi XE2 heeft gerepareerd. Hieronder staat het bronfragment van QC om de bug te reproduceren.

program Generics;

    {$APPTYPE CONSOLE}

    uses
       Generics.Collections, Rtti, SysUtils;

    type
       TIntList = TList;

       TRecContainer = record
         FList: TIntList;
       end;

       TObjContainer = class
         FList: TIntList;
       end;

    var
       ctx: TRttiContext;
       f: TRttiField;

    begin
       ctx := TRttiContext.Create;
       try
         for f in ctx.GetType(TypeInfo(TRecContainer)).GetFields do
           if f.FieldType <> nil then
             writeln(f.FieldType.Name)
           else
             writeln('f.FieldType = nil');
         for f in ctx.GetType(TypeInfo(TObjContainer)).GetFields do
           if f.FieldType <> nil then
             writeln(f.FieldType.Name)
           else
             writeln('f.FieldType = nil');
       finally
         ctx.Free;
         readln;
       end;
    end.
7
Welnu, ik kan bevestigen dat het niet werkt in XE2.
toegevoegd de auteur LU RD, de bron

1 antwoord

Helaas is deze fout nog steeds aanwezig in Delphi XE2, als tijdelijke oplossing kun je het type TIntList als volgt declareren

TIntList = class(TList);
8
toegevoegd
Bedankt, daarmee is mijn probleem opgelost (serialisatie met collecties )
toegevoegd de auteur iamjoosy, de bron