Поиск значения enum по его атрибуту Description

Это может показаться немного перевернутым, но я хочу иметь возможность получить значение enum из enum по его атрибуту Description.

Итак, если у меня есть enum, объявленный следующим образом:

enum Testing
{
    [Description("David Gouge")]
    Dave = 1,
    [Description("Peter Gouge")]
    Pete = 2,
    [Description("Marie Gouge")]
    Ree = 3
}

Я бы хотел получить обратно 2, поставив строку "Peter Gouge".

В качестве отправной точки я могу перебрать поля enum и получить поле с правильным атрибутом:

string descriptionToMatch = "Peter Gouge";
FieldInfo[] fields = typeof(Testing).GetFields();

foreach (FieldInfo field in fields)
{
    if (field.GetCustomAttributes(typeof(DescriptionAttribute), false).Count() > 0)
    {
        if (((DescriptionAttribute)field.GetCustomAttributes(typeof(DescriptionAttribute), false)[0]).Description == descriptionToMatch)
        {

        }
    }
}

Но потом я застрял в том, что делать в этом внутреннем, если. Также не уверен, если это путь идти в первую очередь.

3 ответа

Решение

Используя метод расширения, описанный здесь:

Testing t = Enum.GetValues(typeof(Testing))
                .Cast<Testing>()
                .FirstOrDefault(v => v.GetDescription() == descriptionToMatch);

Если не найдено подходящего значения, он вернет (Testing)0 (вы можете определить None член в вашем перечислении для этого значения)

return field.GetRawConstantValue();

Вы можете, конечно, вернуть его к тестированию, если это необходимо.

Хорошо, после ввода всего, что я думаю, это случай решения в самом начале, который ведет меня по неверному пути. Enum, казалось бы, правильный путь для начала, но простой Dictionary<string, int> Хватит и будет намного проще с ним работать!

Другие вопросы по тегам