Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2013, 21:45   #1
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
Радость Локализация битовые enum-ов

Добрый вечер уважаемые форумчане. Как можно сделать что бы битовый enum преобразовывался в строку? делал так.
Сам enum:
Код:
[Flags]
    public enum JOBSTATUS
    {
        [Description("Пауза")]
        JOB_STATUS_PAUSED = 0x00000001,
        [Description("Ошибка")]
        JOB_STATUS_ERROR = 0x00000002,
        [Description("Удаляю")]
        JOB_STATUS_DELETING = 0x00000004,
        [Description("Загружаю")]
        JOB_STATUS_SPOOLING = 0x00000008,
        [Description("Печаю")]
        JOB_STATUS_PRINTING = 0x00000010,
        JOB_STATUS_OFFLINE = 0x00000020,
        JOB_STATUS_PAPEROUT = 0x00000040,
        [Description("Печать")]
        JOB_STATUS_PRINTED = 0x00000080,
        [Description("Удаление")]
        JOB_STATUS_DELETED = 0x00000100,
        JOB_STATUS_BLOCKED_DEVQ = 0x00000200,
        JOB_STATUS_USER_INTERVENTION = 0x00000400,
        [Description("Перезапуск")]
        JOB_STATUS_RESTART = 0x00000800,
        [Description("Готово")]
        JOB_STATUS_COMPLETE = 0x00001000,
        [Description("Сохранить")]
        JOB_STATUS_RETAINED = 0x00002000,
        JOB_STATUS_RENDERING_LOCALLY = 0x00004000,
    }
Код который локализует enum
Код:
        public static string GetEnumDescription(Enum value)
        {
            FieldInfo fi = value.GetType().GetField(value.ToString());

            DescriptionAttribute[] attributes =
                (DescriptionAttribute[])fi.GetCustomAttributes(
                typeof(DescriptionAttribute),
                false);

            if (attributes != null &&
                attributes.Length > 0)
                return attributes[0].Description;
            else
                return value.ToString();
        }
Но так работает если enum содержит в себе только одно значение, а если их несколько то ничего не работает.
WizarD.89 вне форума Ответить с цитированием
Старый 08.06.2013, 22:39   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а как вы себе это представляете?
в значении лежат например: JOB_STATUS_PAUSED, JOB_STATUS_PRINTING, JOB_STATUS_OFFLINE, что должно выдать?
eval вне форума Ответить с цитированием
Старый 08.06.2013, 22:51   #3
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Пауза, Печатаю, ОФЛАЙН :D xD нормальное же будет) ну уж точно лучше чем так)
WizarD.89 вне форума Ответить с цитированием
Старый 08.06.2013, 23:03   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А что мешает у каждого поля прописать Description ???
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.06.2013, 23:18   #5
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Код:
     FieldInfo fi = value.GetType().GetField(value.ToString());
вот этот код узнает о полях которые есть в enum, если такие полей несколько как написал eval, то естественно данный код не будет работать. Может здесь можно как то по-другому написать?
WizarD.89 вне форума Ответить с цитированием
Старый 09.06.2013, 10:03   #6
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
Радость

Нашел выход=)УРААА

Код:
public static string GetEnumDescription(Enum value)
{ 
        List<String> names =value.ToString().Split(',').ToList<String>();
        String nameLocalization="";
         foreach (String name in names)
               {
                  object[] attrs =value.GetType().GetField(name.Trim()).GetCustomAttributes(typeof(DescriptionAttribute), false);
                nameLocalization = nameLocalization + ((DescriptionAttribute)attrs[0]).Description;
            }
return nameLocalization;

  }
WizarD.89 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Локализация программы через INI, локализация диалоговых сообщений? Человек_Борща Общие вопросы Delphi 2 16.08.2024 11:04
С++ перечисление,enum marina12 Помощь студентам 0 03.06.2013 22:05
Светофор (enum) sidestep Общие вопросы C/C++ 5 18.03.2012 15:02
c++ enum tanek Помощь студентам 1 06.12.2011 04:43
enum Syltan Общие вопросы C/C++ 6 26.11.2009 19:24