2011-12-06 7 views
7

Tuve problemas al utilizar rtti para obtener información sobre los campos de clase de un tipo genérico. Después de bastante googlear encontré una entrada en QC que describe el problema. Mi pregunta es si alguien sabe una solución alternativa o si esto se solucionó con Delphi XE2. A continuación se muestra el fragmento de código fuente de QC para reproducir el error.Rtti no funciona con los tipos de genéricos utilizados como campos de clase

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

Bueno, puedo confirmar que no está funcionando en XE2. –

Respuesta

8

unfortunally este error es todavía presente en Delphi XE2, como solución provisional, puede declarar el tipo TIntList como esto

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

Gracias, eso resolvió mi problema (Serialización con [Colecciones] (http://code.google.com/p/delphi-coll/)) – iamjoosy

Cuestiones relacionadas