考虑这样的枚举:
type
TTypeOfData = (
[XmlName('ABC')] todABC,
[XmlName('DEF')] todDEF,
[XmlName('GHI')] todGHI
);
其中 XmlName 是一个自定义属性,用于定义此枚举成员的序列化字符串。
如何探索附加到该枚举的每个成员的属性?
最佳答案
虽然 Barry 清楚地回答了您有关枚举元素属性的问题,但我将尝试另一个建议。从您的示例中,您按照 Delphi 中的传统做法为每个枚举元素添加“tod”前缀,因为枚举元素在范围内是全局的(即,如果除了 todABC 枚举元素之外,您在范围内还有一个标识符 todABC,您可以获得一些奇怪的行为)。
从 D2007 开始,我们引入了“作用域枚举”的概念,启用该概念后,要求您使用枚举本身的标识符来限定枚举元素。例如:
{$SCOPEDENUMS ON}
type
TTypeOfData = (ABC,DEF,GHI);
将要求您将 ABC 元素引用为 TTypeOfData.ABC。这允许您使用无前缀的枚举元素标识符,并且不会冒冲突的风险,因为元素的“范围”仅限于枚举。启用 {$SCOPEDENUMS} 时声明的任何枚举都将以这种方式运行。
鉴于此,您现在可以安全地使用 RTTI 以您希望的格式获取实际的枚举元素名称。
关于德尔福2010 RTTI : Explore Enumerations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134120/