我正在尝试将通用记录与RTTI一起使用,但遇到类型信息问题。有谁知道为什么以下内容无法使用Delphi 2010进行编译?

program GenericTypeInfo;

{$APPTYPE CONSOLE}

uses
  TypInfo,
  SysUtils;

type

  TMyRec<T> = record
  public
    Value: T;
  end;

  TMyInt = TMyRec<Integer>;
  TMyString = TMyRec<String>;

begin

  try
    Writeln(GetTypeName(TypeInfo(TMyRec<Integer>)));     <--- This works fine
    Writeln(GetTypeName(TypeInfo(TMyRec<String>)));      <---   so does this
    Writeln(GetTypeName(TypeInfo(TMyInt)));              <--- BUT this won't compile
    Writeln(GetTypeName(TypeInfo(TMyString)));           <---   nor this!!
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

  Readln;

end.


上面指示的行生成以下编译器错误:

[DCC Error] GenericTypeInfo.dpr(24): E2134 Type 'TMyInt' has no type info
[DCC Error] GenericTypeInfo.dpr(24): E2134 Type 'TMyString' has no type info


我不能知道两者之间的最大区别是什么?我承认我不是低级专家,但是为什么编译器会对此有所不同?我需要它才能用于TMyInt和TMyString类型。

谢谢你的帮助。

最佳答案

这是XE和更高版本已修复的bug in Delphi 2010

但是有一个workaround

09-25 17:42