Можно ли установить свойство как Enum, но получить пользовательское значение строки? - PullRequest
0 голосов
/ 28 апреля 2019

Я бы хотел установить свойство как Enum, чтобы можно было хранить только определенные значения, но при получении свойства я хотел бы получить строковое значение.

Так, например, сохранить EnumOrange1, но получите "Orange 1".

Возможно ли это?Если нет, то как лучше всего этого добиться?

1 Ответ

2 голосов
/ 28 апреля 2019

Один из способов - использовать атрибут Description. Давайте создадим Enum, который выглядит так:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...