我正在尝试遍历我的枚举并从中提取值,字符串和描述?我怎样才能做到这一点?
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美元/磅
感谢您的帮助。
答案 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