Перечислим в Int. Int в Enum. Лучший способ сделать преобразование?

2
 public Enum Days
 {
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
 }

Теперь я хотел знать, как получить целочисленное значение перечисления и преобразовать целочисленное значение в enum

Воля

       int dayNo = (int) Days.Monday;

измените значение dayNo на 1;

и

Воля

        Days day = (Days) 2;

назначить Days.Tuesday переменному дню??

Как это лучший способ сделать синтаксический анализ?

  • 11
    Вы не можете попробовать и сами убедиться?
  • 2
    Кастинг должен работать. Кстати, в BCL уже есть перечисление DayOfWeek : msdn.microsoft.com/en-us/library/system.dayofweek.aspx
Теги:
enums

5 ответов

6
Лучший ответ

Да, он будет делать именно это, кроме Enum должен быть Enum

public enum Days
 {
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
 }

Чтобы использовать Enum.Parse, вы ДОЛЖНЫ предоставить строку, поэтому, если вы хотите отбросить из int, вам придется пройти через строку, которая является уродливой.

Days x = (Days)Enum.Parse(typeof(Days), "3");
Days y = (Days)Enum.Parse(typeof(Days), 3.ToString());

... обе дают вам среду.

7

Да, и это очень легко проверить:

Days d = (Days)3;
Console.WriteLine(d);

Это приведет к выводу

Wednesday

Как наилучшая практика, имя вашего enum должно быть Day not Days; переменная d выше представляет a Day not Days. См. правила именования в MSDN.

4

Одним словом, да.

2

Ваше понимание перечислений правильно.

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

Как ни странно, для разбора чисел вам нужно сначала вызвать ToString(), так как Enum.Parse не имеет целочисленной перегрузки.

На странице MSDN:

Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object.
  • 0
    спасибо, я просто хотел узнать, есть ли другой способ сделать выше, кроме как при разборе.
  • 1
    Enum.Parse НЕ конвертирует из int в соответствующее значение enum . Этот ответ в лучшем случае неверен или вводит в заблуждение.
Показать ещё 4 комментария
1

Да, будет. Но вы пробовали его перед публикацией?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню