2011-12-06 6 views
7

rttiを使用してジェネリック型のクラスフィールドに関する情報を取得する際に問題が発生しました。かなりのgoogleingの後に私はQCに問題を記述するエントリを見つけました。私の質問は、誰かが回避策を知っている場合、またはこれが修正されたDelphi XE2を入手した場合です。以下は、バグを再現するQCのソーススニペットです。クラスフィールドとして使用されるジェネリック型でRttiが動作しない

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. 
+0

ようTIntList型を宣言することができますように、私はそれがXE2で働いていないされていることを確認することができ、まだデルファイXE2に存在しています。 –

答えて

8

Unfortunallyこのバグは回避策は、あなたがさて、この

TIntList = class(TList<Integer>); 
+0

ありがとう、それは私の問題(シリアル化[コレクション](http://code.google.com/p/delphi-coll/))を解決 – iamjoosy

関連する問題