如果在C#中声明枚举,则默认类型为自动int。
那么为什么在case语句或其他实例中使用enum时你必须显式重新编译才能使用这些值?如果你必须明确表达或者我在这里做错了什么,那么有一个基础类型有什么意义呢?
private enum MyEnum
{
Value1,
Value2,
Value3
}
switch (somevalue)
{
case (int)MyEnum.Value1:
someothervar = "ss";
break;
case (int)MyEnum.Value2:
someothervar = "yy";
break;
case (int)MyEnum.Value3:
someothervar = "gg";
break;
}
答案 0 :(得分:15)
somevalue的类型是什么?如果类型是MyEnum,则铸造是不必要的,并且应该没有错误。
如果类型是int然后是,则必须转换为MyEnum才能正确切换/大小写。但是你可以通过转换值而不是每个case语句来使这更简单一些。例如
switch( (MyEnum)somevalue ) {
case MyEnum.Value1: ...
}
答案 1 :(得分:4)
显然,somevalue是一个整数,而不是明确键入你的枚举。您应该记住underlying value of an enum is just the "storage type"并且不能隐式地互换。但是,您可以轻松使用强制转换操作符使代码简单且“更”类型安全:
private enum MyEnum { Value1, Value2, Value3 }
switch ((MyEnum)somevalue)
{
case MyEnum.Value1:
someothervar = "ss";
break;
case MyEnum.Value2:
someothervar = "yy";
break;
case MyEnum.Value3:
someothervar = "gg";
break;
default:
throw new NotSupportedException();
}
最终你想要一个你不需要从整数转换为枚举的设计,但通常在从磁盘或DB读取时不是这种情况。
答案 2 :(得分:2)
如果somevalue
的类型为MyEnum
,则您无需转换为int
。
public enum Color
{
Red,
Blue,
Green
}
class Program
{
static void Main(string[] args)
{
Color color = Color.Red;
switch (color)
{
case Color.Red:
break;
case Color.Blue:
break;
case Color.Green:
break;
}
}
}
答案 3 :(得分:1)
正如其他人所说: