代码之家  ›  专栏  ›  技术社区  ›  KevinRF

Delphi2010 RTTI:如何插入/浏览包含自定义属性的枚举

  •  1
  • KevinRF  · 技术社区  · 14 年前

    我使用TCustomAttribute子类(TEnumAttribute)创建了一个枚举,为每个枚举提供额外的数据(如果成功,它将驱动一个自定义组件,该组件可以查询枚举并相应地填充自己)。

    
    type
      TShoppingCartType = (
    
        [TEnumAttribute(0, 'All')]
        sctAll,
    
        [TEnumAttribute(1, 'Web Shopping Cart')]
        sctWebShoppingCart,
    
        [TEnumAttribute(2, 'Wish List')]
        sctDefaultWebWishList,
    
        [TEnumAttribute(3, 'Custom')]
        sctWebCustomList
    
        );
    
    

    我可以很好地获取名称和值(使用相应的TypeInfo GetEnum方法),但是如何访问枚举中的每个值并访问它的定义属性?

    谢谢你的消息

    1 回复  |  直到 14 年前
        1
  •  3
  •   Bruce McGee    14 年前

    据我所见你只能注释 具有属性。由于枚举的值只是一个简单的序数值,因此您的方法可能不起作用。

    如果枚举值本身是类型,则可以使用 TRttiContext TRttiType 如官方文件所述:

    http://docwiki.embarcadero.com/RADStudio/XE/en/Extracting_Attributes_at_Run_Time

    用经典的方式来做似乎更合适:

    TShoppingCartTypeDescriptions = array[TShoppingCartType] of string;
    
    ...
    
    Descriptions: TShoppingCartTypeDescriptions;
    Descriptions[sctAll] := 'All';
    Descriptions[sctWebShippingCart] := 'Web Shopping Cart';
    // and so on
    

    var 
      I: TShoppingCartType;
    begin
    
      for I := Low(TShoppingCartType) to High(TShoppingCartType) do
          // Do something with I
    
    end;