Существует очень простое решение (если вы можете изменить целочисленные значения) , специально предназначенное для работы с числами. Тот факт, что ваш номер enum
, не является проблемой. Это по-прежнему integer
(или любой другой тип номера, который вы назначаете). Enum
просто добавляет сложность к касту.
Предположим, ваш enum
определен так:
public enum ItemStatus
{
New = 0,
Draft = 1,
Received = 2,
Review = 4,
Rejected = 8,
Approved = 16
}
ItemStatus myStatus = ItemStatus.Draft;
Используйте побитовые операции на Enum
. Например:
myStatus = (ItemStatus)(((int)myStatus) << 1)
Результат myStatus: ItemStatus.Received .
Вы также можете перейти назад Enum
, изменив побитовый оператор с <<
на >>
.
myStatus = (ItemStatus)(((int)myStatus) >> 1)
Результат myStatus: ItemStatus.New .
Вы всегда должны добавлять код для проверки ситуации "вне границ" в обоих направлениях.
Подробнее о побитовых операциях вы можете узнать здесь: http://code.tutsplus.com/articles/understanding-bitwise-operators--active-11301