Пометить перечисление общими значениями в зависимости от контекста? - PullRequest
2 голосов
/ 13 января 2012

Я хочу создать перечисление флага, но разделить его на два варианта использования:

  • Вариант использования 1: для хранения ответа да / нет.
  • Вариант пользователя 2: для сохранения множественного выбораответ.

Например: я определил следующее

[Flags]
public enum Answer
{
    Yes = 1, 
    No = 2,
    Choice1 = 1,
    Choice2 = 2,
    Choice3 = 4,
    Choice4 = 8,
}

Причиной объединения является совместимость интерфейса (например, ответ процесса).Есть ли аргументы против этого дизайна?Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 января 2012
[Flags]
public enum Answer
{
    No = 0, 
    Choice1 = 1,
    Choice2 = 2,
    Choice3 = 4,
    Choice4 = 8,
    Yes = 0x80000000,
}
1 голос
/ 13 января 2012

Я бы этого не делал. И вот почему:

class Program
    {
        [Flags]
        public enum Answer
        {
            Yes = 1,
            No = 2,
            Choice1 = 1,
            Choice2 = 2,
            Choice3 = 4,
            Choice4 = 8,
        }

        static void Main(string[] args)
        {

            int SomeInt = (int)Answer.Choice1;

            Console.WriteLine((Answer)SomeInt);

            Console.ReadKey();
        }
    }

Результат этого

"Да"

Это имеет смысл, и, очевидно, это синтаксически правильно, но вам очень трудно поддерживать такое перечисление. Это будет соответствовать первому правильному значению перечисления. Я считаю, что эту логику можно улучшить, чтобы путаница была ограничена / устранена.

Буду ли я это делать? нет Нет .

0 голосов
/ 13 января 2012

1) Если вы хотите проверить, получен ответ на вопрос или нет, вы можете проверить значение 1 (если значение 1 означает, что оно не получено).2) Если выбран какой-либо из вариантов, можно предположить, что на ваш ответ дается ответ.

public enum Answer {
  No = 1,     
  Choice1 = 2,     
  Choice2 = 3,     
  Choice3 = 4,     
  Choice4 = 8
} 

Надеюсь, это поможет!

...