是否可以将属性设置为Enum但获得自定义字符串值?

时间:2019-04-28 00:23:49

标签: .net vb.net enums

我想将一个属性设置为Enum,以便只能存储某些值,但是在获取该属性时,我想获取一个字符串值。

例如,存储一个Orange1的枚举,但获得“橙色1”。

这可能吗?如果没有,实现此目标的最佳方法是什么?

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"