Rtti不适用于用作类字段的泛型类型

时间:2011-12-06 18:41:19

标签: delphi delphi-xe rtti

我在使用rtti获取有关泛型类字段的信息时遇到了问题。经过一段时间的谷歌搜索后,我在QC中找到了一个描述该问题的条目。我的问题是,如果有人知道一个解决方法,或者这是否修复了Delphi XE2。以下是来自QC的重复该错误的源代码片段。

program Generics;

    {$APPTYPE CONSOLE}

    uses
       Generics.Collections, Rtti, SysUtils;

    type
       TIntList = TList<Integer>;

       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.

1 个答案:

答案 0 :(得分:8)

遗憾的是,这个错误仍然存​​在于Delphi XE2中,因为您可以像这样声明TIntList类型

TIntList = class(TList<Integer>);