给出枚举类型:
enum SOMEENUM
{
A = true,
B = false,
C = true
}
我希望switch
就像这样:
public void SWITCHON (SOMEENUM sn)
{
switch(s)
{
case SOMEENMUM.A : xxxxxxxx.......
}
}
但这不编译;我猜它正在使用枚举的bool
值。
我想切换Enum,好像没有分配给它的值。
答案 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;
}
}