我使用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方法),但是如何访问枚举中的每个值并访问它的已定义属性?
感谢您提供任何信息
答案 0 :(得分:3)
据我所知,您只能使用属性注释类型。由于枚举的值只是一个简单的序数值,因此您的方法可能不起作用。
如果枚举值是类型本身,您可以使用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;