Такая проблема. Есть перечисление
[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.
При работе с флагами, желательно, чтобы значения соответствовали отдельным битам, например:
1 (0b0000001)
2 (0b0000010)
4 (0b0000100)
8 (0b0001000)
и т.д.
Это позволит при использовании битового ИЛИ получать одно значение, соответствующее сразу двум флагам, при этом это значение будет уникальным для любой комбинации флагов и по нему всегда можно будет сказать, с помощью каких флагов оно образовано.
В вопросе, значения перечисления идут по порядку, в связи с этим возникают коллизии, когда одно значение можно получить несколькими способами, например:
Incomes = 5
Consumptions | Group = 5
Date | Description = 5
Именно на это и ругается switch
.
В связи с этим может возникнуть вопрос, а что же делает атрибут Flags
, собственно, ничего не делает
С каким протоколом транспортного уровня работает класс SmtpClient с udp или tcp или каким то еще? И можно ли как то повлиять на выбор этого протокола?
Делаю секундомер который должен работать в отдельном от GUI потоке, но выводить в label времяСекундомер должен работать параллельно остальным...
Кто-нибудь сталкивался с такой ошибкой при работе с nwjs? [0607/131754:ERROR:process_info