2011-12-06 11 views
7

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

Vâng này, tôi có thể khẳng định nó không được làm việc trong XE2. –

Trả lời

8

Unfortunally lỗi này vẫn còn hiện diện trong Delphi XE2, như Giải pháp bạn có thể khai báo kiểu TIntList như

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

Cảm ơn, đã giải quyết được sự cố của tôi (Nối tiếp với [Bộ sưu tập] (http://code.google.com/p/delphi-coll/)) – iamjoosy