根据上下文标记具有共享值的枚举?

时间:2012-01-12 23:34:55

标签: c# enums flags

我希望设计一个标志枚举,但由两个用例共享:

  • 用例1:存储是/否答案。
  • 用户案例2:存储多项选择答案。

例如:我已经定义了以下内容

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

将此组合起来的原因是共享一致的界面(例如,流程答案)。有没有反对这种设计的论据? 谢谢!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我不会这样做。原因如下:

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();
        }
    }

结果是

“是”

这很有道理,显然它在语法上是正确的,但是你很难维护这样的枚举。它将匹配枚举的第一个正确值。这是我认为可以改进的逻辑,以便限制/消除混淆。

我会这样做吗?

答案 2 :(得分:0)

1)如果您想检查问题是否得到回答,那么您可以检查值1(如果值1表示没有回答)。 2)如果设置了任何选项,那么您可以假设您的答案正在被回答。

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

希望这有帮助!