如何获取枚举值,字符串和描述

时间:2014-01-23 01:06:23

标签: vb.net enums

我正在尝试遍历我的枚举并从中提取值,字符串和描述?我怎样才能做到这一点?

Enum Fruits
        <Description("$1.99/lb")> Apple = 1
        <Description("$0.99/lb")> Banana= 2
        <Description("$3.99/lb")> Orange= 3
End Enum

Persudo代码

For Each item in Fruits
   Dim value as integer
   Dim text as string 
   Dim description as string
   Dim returnText = String.Format("ID: {0}  {1} is {2}", value, text, description) 
Next 

我想得到:

ID:1 Apple为1.99美元/磅

ID:2香蕉是0.99美元/磅

ID:3橙色为3.99美元/磅

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是管理数据元素的一种非常糟糕的方式:每次香蕉价格上涨时,您都必须更改代码。应为静态项目保留说明。例如:

Friend Enum ImgSizes
     <Description("Large,  1600x900")> Lg = 1600               
     <Description("Medium, 1280x720")> Med = 1280
     <Description("Small,   720x480")> Sm = 720
End Enum

此处,可以获取描述以在组合框中显示以提供友好的翻译。否则,value只是枚举的整数值,名称可以从.ToString获得。唯一的技巧是描述:

Shared Function GetDescription(ByVal EnumConstant As [Enum]) As String
   Dim fi As FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
   Dim attr() As DescriptionAttribute = DirectCast(
       fi.GetCustomAttributes(GetType(DescriptionAttribute), False), 
          DescriptionAttribute())
   If attr.Length > 0 Then
       Return attr(0).Description
   Else
       Return EnumConstant.ToString()
   End If
End Function

你的循环需要工作,你需要使用OPTION STRICT。循环访问值以获取所需信息。索引变量必须As Fruits otehrwise它不是Enum / Friuts,而是整数或对象,没有任何东西可以工作。

For Each v As Fruit In [Enum].GetValues(GetType(Fruits))
    returnText = String.Format("ID: {0}  {1} is {2}", 
          Convert.ToInt32(v), v.ToString, 
          GetDescription(GetType(v)) 
Next