我声明了以下枚举类型,我希望第一个成员的序数值为1(一个),而不是通常的0(零):

  type
    TMyEnum = (
               meFirstValue = 1,
               meSecondValue,
               meThirdValue
              );

如果我致电 TypeInfo(),例如作为对 GetEnumName()的调用的一部分,出现编译器错误:
  GetEnumName(TypeInfo(TMyEnum), Ord(aValue));

错误:“E2134:类型'TMyEnum'没有类型信息”

为什么是这样?

我知道,只有在启用 $ M 编译器选项或(从某些类(例如 TPersistent 派生))编译的情况下,类才具有typeinfo,但我认为为typeinfo设置不存在任何特殊条件枚举类型。

最佳答案

不连续的枚举,以及不是从零开始的枚举,都没有typeinfo。要实现typeinfo,由于向后兼容性问题,它必须采用与现有tkEnumeration不同的格式。

我考虑过为Delphi 2010实现tkDiscontiguousEnumeration(或可能命名更好的成员),但是考虑到它们的相对稀缺性以及枚举的困难,好处似乎很小-您如何有效地对范围进行编码?有些编码在某些情况下更好,而在另一些情况下则更糟。

关于delphi - 为什么我得到枚举类型的 “type has no typeinfo”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1420562/

10-12 12:35