Я столкнулся с чем-то, что кажется мне странным, но в то же время имеет смысл по причинам, которые я не знаю.C# enum, double previous enum value
У меня есть это перечисление:
[Flags] public enum Flags { RemoveQuoteMarks = 1, t1 = 2, t2 = 4, t3 = 8, t4 = 16, t5 = 32, t6 = 64, t7 = 128 }
Раньше я не вручную установить значение перечислений, они индекс от 0 и Стандартно увеличение на 1 правых?
Ну, я заметил странное поведение, когда я пытался загрузить эту строку:
string value = "t1, t3, t4, t7";
и разобрать его с помощью:
Flags flags = (Flags)Enum.Parse(typeof(Flags), value);
и результат был просто «Т7», так что я сделал некоторые исследования , и заметил, что многие другие использовали ручную индексацию, где каждое значение перемножения было удвоено по сравнению с предыдущим (например, «t3 = 8», «t4 = 16»), поэтому я применил это правило к моему, и это сработало. теперь отображается как:
t1, t3, t4, t7
по желанию, зачем мне вручную настраивать мои значения перечисления?
потому что он использует побитовый оператор '|'. если вы не модифицируете такие значения, это будет выглядеть как '1 | 3 | 4 | 7 ', что приведет к' 7'. потому что 7 является '111' в двоичном коде и будет есть все остальные значения;) –
Прочтите ответ на дубликат, особенно раздел« под крышкой ». – Blorgbeard
Спасибо всем, я чувствую, что теперь я понимаю намного лучше! –