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.
Bueno, puedo confirmar que no está funcionando en XE2. –