Rtti не работает с generics-типами, используемыми как поля класса

У меня возникли проблемы с использованием rtti для получения информации о полях класса общего типа. После некоторого гугления я нашел запись в QC, описывающую проблему. Мой вопрос в том, знает ли кто-нибудь обходной путь, или это было исправлено в Delphi XE2. Ниже приведен исходный фрагмент из QC для воспроизведения ошибки.

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
задан iamjoosy 6 December 2011 в 18:41
поделиться