2015-12-08 3 views
1

У меня есть это перечислениеC# Изменение INT значение элемента в перечислении

enum Items { pen = 5, watch = 4, rubber = 1, ruler = 8}; 

, и я хочу, чтобы изменить значение часов (сейчас 4) до 6. Так что-то вроде этого:

Items.watch = 6; 

но это не работает. Есть идеи?

+0

И почему вы хотите это сделать? Вы можете изменить его в объявлении перечисления напрямую, поэтому установка 6 вместо 4. Изменение его после того, как оно назначено, похоже на странный случай использования. –

+0

Перечисления в основном представляют собой набор именованных констант, поэтому переопределение значения невозможно. – CalebB

+0

Единственный способ сделать это - перекомпилировать сборку, которая объявит «Элементы». – MarcinJuraszek

ответ

7

Значение перечисления фиксируется во время компиляции. По Microsoft's C# documentation:

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

Обратите внимание на термин «константы». Если вы хотите изменить целочисленное значение записи перечисления, вы должны перекомпилировать код.

2

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

можно связать отдельное значение с перечислимого путем создания словаря, но это не приведет к изменению значений констант перечислений себя:

private static IDictionary<Items,int> AssociatedValue = new Dictionary<Items,int> { 
    {Items.pen, 5}, {Items.watch, 4}, {Items.rubber, 1}, {Items.ruler, 8} 
}; 

Теперь вы можете установить

AssociatedValue[Items.watch] = 6 

но вам нужно будет использовать AssociatedValue[enumVal] вместо (int)enumVal, когда вам понадобится целочисленное значение.

Смежные вопросы