我想将一个属性设置为Enum,以便只能存储某些值,但是在获取该属性时,我想获取一个字符串值。
例如,存储一个Orange1
的枚举,但获得“橙色1”。
这可能吗?如果没有,实现此目标的最佳方法是什么?
答案 0 :(得分:2)
一种方法是使用Description属性。让我们创建一个如下所示的枚举:
Public Enum Fruit
<Description("Orange 1")>
Orange1 = 1
<Description("Orange2")>
Orange2 = 2
<Description("Apple 1")>
Apple1 = 3
End Enum
现在在模块中,添加以下扩展方法:
<Runtime.CompilerServices.Extension>
Public Function GetEnumDescription(item As [Enum]) As String
Return If(item.GetType().
GetField(item.ToString()).
GetCustomAttributes(GetType(DescriptionAttribute), False).
Cast(Of DescriptionAttribute)().
FirstOrDefault()?.Description, String.Empty)
End Function
然后,您可以执行以下操作:
Dim f As Fruit = Fruit.Orange1
Console.WriteLine(f.GetEnumDescription()) ' Prints "Orange 1"