Такая проблема. Есть перечисление
[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.
Комментариев нет:
Отправить комментарий