具有指定值的枚举类型没有TypeInfo,为什么?

时间:2010-06-16 14:55:03

标签: delphi rtti typeinfo

使用Delphi 2007我可以编写以下代码:

interface
TTestType = (ttTest1, ttTest2);

procedure enumName;
var
  EnumName: String;
begin
  EnumName := GetEnumName(TypeInfo(TTestType), Ord(ttTest1));
end;

这个编译和工作,EnumName在函数末尾包含'ttTest1'。

但是,当我将TTestType改为这样的时候:

interface
TTestType = (ttTest1=1, ttTest2=2);

我的代码突然不再编译了。 [DCC Error] Test.pas(271): E2134 Type 'TTestType' has no type info

现在我可以使用枚举名创建一个const数组字符串,但我发现这是一个肮脏的解决方案。任何人都能指出我正确的方向,还是我在这里尝试一些不可能的事情?

1 个答案:

答案 0 :(得分:2)

我认为片段之间没有任何区别,但假设您做了类似“ttype =(x = 1,y = 2);”的操作。这将阻止Delphi生成RTTInformation。至少在D2010之前,这是一个编译器限制。