Флаги перечисления и побитовые операции против «строки битов»

Один из разработчиков предложил сохранить несколько дней недели в виде 7-символьной строки, равной 1 ’.с и 0s, т.е.1000100” на понедельник и пятницу. Я предпочел (и настоятельно предложил) решение с перечислением Flags и побитовыми операциями, я думаю, что 'Это более чистый способ сделать это, и это должно быть легче понять для других разработчиков.

  [Flags()]
  public enum Weekdays : int
  {
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
  }

Однако, когда я начал реализовывать пример решения, я понял, что, возможно, простой строковый подход все-таки проще: конечно, битовая строка более очевидна, чем «17” если ты'просто смотрю на данные. И я нахожу побитовые операции C # нелогичными и чрезвычайно многословными:

Weekdays workDays = Weekdays.Monday | Weekdays.Tuesday;
if ((workDays & Weekdays.Monday) == Weekdays.Monday) 
{...}

Конечно, это можно было бы красиво обернуть в методы расширения, но затем мы неожиданно получаем по крайней мере такое же количество строк кода, что и в случае строкового решения, и я с трудом могу утверждать, что побитовый код легче читать.

При этом, я все еще пошел бы с перечислением флагов и побитовыми операциями. Ключевые преимущества, о которых я могу подумать:

Лучшая производительностьТребуется меньше места для хранения

Так как же продать побитовое решение моим коллегам? Нужно ли мне? Каковы другие преимущества использования этого метода перед строками? После завершения примера проекта я обнаружил, что команда все еще выбрала решение на основе строк. Мне нужны лучшие / более сильные аргументы. Почему вы должны использовать перечисления Flags, а не простые битовые строки?

Ответы на вопрос(6)

Ваш ответ на вопрос