Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Switch-Case с перечислением С#

Такая проблема. Есть перечисление
[Flags] public enum SortType { Amount = 0, Consumptions = 1, Date = 2, Description = 3, Group = 4, Incomes = 5, Kind = 6, Counterparty = 7, Type = 8, Valute = 9 }
По не му нужно пройтись switch-caseом, учитывая компоновку, потому что нужно выбрать множество вариантов для сортировки, но при некоторых раскладах, вроде следующего, появляется ошибка:
case SortType.Consumptions: break; case SortType.Consumptions | SortType.Date: break; //Предложение Switch содержит несколько случаев со значением "3" (Откуда, если в данном контексте оно впервые?) case SortType.Consumptions | SortType.Description: break; case SortType.Consumptions | SortType.Group: break; //Предложение Switch содержит несколько случаев со значением "5" (То же самое) case SortType.Consumptions | SortType.Incomes:
И так повторяется на каждое нечётное число. Хотя в похожем коде (вместо Consumprions стоит Amount) ошибок нет. Что делать?


Ответ

Чтобы корректно работали побитовые операции, каждый флаг должен занимать свой отдельный бит:
[Flags] public enum SortType { Amount = 0, Consumptions = 1 << 0, Date = 1 << 1, Description = 1 << 2, Group = 1 << 3, Incomes = 1 << 4, Kind = 1 << 5, Counterparty = 1 << 6, Type = 1 << 7, Valute = 1 << 8 }
Иначе получается что, например, Description - это уже побитовое пересечение Consumptions и Date.

Комментариев нет:

Отправить комментарий