Создать перечисление из атрибута - PullRequest
2 голосов
/ 11 ноября 2011

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

Получение правильной строки из значения перечисления работает нормально, но как я могу сгенерировать перечисление из строки?

Я начал с этого:

foreach (var fieldInfo in enumType.GetFields())
{
    var attribute = (EntityNameAttribute)fieldInfo
        .GetCustomAttributes(typeof (EntityNameAttribute), false)
        .FirstOrDefault();

    if (attribute == null)
        continue;

    if (attribute.Name != name)
        continue;

    //got a match. But now what?
}

Но как мне получить правильное значение из поля? Могу ли я просто использовать fieldInfo.GetValue? Если это так, какой экземпляр я должен использовать? Следует ли рассматривать перечисление как статический тип?

Ответы [ 2 ]

5 голосов
/ 11 ноября 2011

Да, вы можете использовать:

object value = fieldInfo.GetValue(null);

По сути, это просто статические поля только для чтения. Обратите внимание, что не не получает перечисление из строки ... но если вам нужно сделать это, вы можете использовать Enum.Parse.

Следует отметить одну вещь - если вы используете .NET 3.5, весь ваш код может быть упрощен с помощью LINQ:

var values = from field in enumType.GetFields()
             from EntityNameAttribute attribute in 
                   field.GetCustomAttributes((typeof(EntityNameAttribute), false)
             where attribute.Name == name
             select field.GetValue(null);

(Предполагается, что если в есть несколько атрибутов определенного типа, вам все равно, какой из них имеет правильное имя, и только один будет иметь правильное имя .)

1 голос
/ 11 ноября 2011

Да, это можно рассматривать как статический тип:

string enumString = fieldInfo.GetValue(null).ToString();

будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...