具有指定值的枚举类型没有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
现在我可以使用枚举名称创建一个常量字符串数组,但我发现这是一个肮脏的解决方案。有人能指出我正确的方向还是我在这里尝试一些不可能的事情?
Using Delphi 2007 I can write the following code:
interface
TTestType = (ttTest1, ttTest2);
procedure enumName;
var
EnumName: String;
begin
EnumName := GetEnumName(TypeInfo(TTestType), Ord(ttTest1));
end;
This compiles and works, EnumName contains 'ttTest1' at the end of the function.
However, when I change my TTestType to something like this:
interface
TTestType = (ttTest1=1, ttTest2=2);
My code suddenly won't compile anymore. [DCC Error] Test.pas(271): E2134 Type 'TTestType' has no type info
Now I can make a const array of string with the enum names, but I find this a dirty solution. Can anybody point me in the right direction or am I trying something impossible here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我没有看到这些片段之间有任何区别,但假设您做了类似“ttype=(x=1,y=2);”的操作。这将阻止 Delphi 生成 RTTInformation。至少在 D2010 之前这是一个编译器限制。
I don't see any difference between the snippets, but assume that you did something like "ttype=(x=1,y=2);". That would prevent Delphi from generating RTTInformation. It's a compiler limitation at least until D2010.