德尔福2010 RTTI : Explore Enumerations

标签 delphi delphi-2010 enumeration rtti

考虑这样的枚举:

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/

相关文章:

delphi - 将文件添加到 DPR 文件与 Delphi 2010 中的项目路径

delphi - 如何让Delphi重新保存所有表单?

enumeration - 是否可以在 PostgreSQL 中将枚举转换为文本

java - 参数化 Java 枚举

database - Delphi:数据库被锁定(SQLite)

Delphi 2010 RTTI - RttiContext.FindType

delphi - 如何以编程方式检查修改权限?

c# - 如何在 XML-RPC 和 C# 中使用枚举?

delphi - 将按钮添加到 TToolBar 自定义中的可用列表

delphi - 编译前将 dcu 文件添加到项目中 [OTA]