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