如何在C#中打开具有重复值或布尔值的枚举?

时间:2011-04-16 05:46:18

标签: c# enums switch-statement boolean

给出枚举类型:

enum SOMEENUM 
{
   A = true,
   B = false,
   C = true
}

我希望switch就像这样:

public void SWITCHON (SOMEENUM sn) 
{
   switch(s)
   {
      case SOMEENMUM.A : xxxxxxxx.......
   }
}

但这不编译;我猜它正在使用枚举的bool值。

我想切换Enum,好像没有分配给它的值。

3 个答案:

答案 0 :(得分:3)

首先:
C#中的枚举不支持bool作为值。 所以它应该是整数。 如果我们将枚举的2个属性设置为相同的值,我们可以认为其中一个属性丢失了。 根据我的理解,你实际上要做的是: 以某种方式标记枚举的2个属性是相等的 我的建议是:

public enum MyEnum
{
    [Description("true")]
    A = 1,
    [Description("false")]
    B = 2,
    [Description("true")]
    C = 3
}

Enum的扩展将返回bool

 public static class EnumEx
    {
        public static bool GetDescriptionAsBool(this Enum value)
        {
            FieldInfo field = value.GetType().GetField(value.ToString());
            DescriptionAttribute attribute
                    = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute))
                        as DescriptionAttribute;
            if(attribute == null)
            {
                //throw new SomethingWentWrongException();
            }
            return bool.Parse(attribute.Description);
        }
    }

因此,您可以正常切换,并且可以随时检查您的enums boll标志,只调用该实例的GetDescriptionAsBool方法。

答案 1 :(得分:2)

重复的值只是同一件事的不同名称。没有办法区分,因为枚举存储为值,而不是名称。

对于bool值,您使用if代替switch

答案 2 :(得分:0)

枚举需要数值,但不必设置。我建议删除就像

一样
enum SOMEENUM 
{ 
   A, 
   B,
   C
}

所以

public void SWITCHON (SOMEENUM s) 
{
    switch(s) 
    { 
        case SOMEENMUM.A : ...do stuff...
             break;
        case SOMEENMUM.B : ...do stuff...
             break;
        case SOMEENMUM.c : ...do stuff...
             break;
    }
}