Tôi gặp sự cố khi sử dụng rtti để nhận thông tin về các trường lớp thuộc loại chung. Sau khi một số googleing tôi tìm thấy một mục trong QC mô tả vấn đề. Câu hỏi của tôi là, nếu có ai biết một cách giải quyết, hoặc nếu điều này đã cố định Delphi XE2. Dưới đây là đoạn mã nguồn từ QC để tái tạo lỗi.Rtti không hoạt động với các loại generics được sử dụng làm trường lớp
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.
Vâng này, tôi có thể khẳng định nó không được làm việc trong XE2. –