我在C#中使用了switch语句,我意识到,尽管在switch语句中传递的变量是枚举,但对于case 0,switch语句不会抛出错误,但是对于case 1、2、3,确实会抛出错误……我想知道为什么会这样。我知道如何在switch case中使用枚举,我不需要帮助,我想知道为什么它不会抛出0错误。因为0是一个整数。
下面是代码,编译时没有任何错误。MathOperator是一个枚举。
public double Test5(double num1, double num2, MathOperator op)
{
double answer=0;
switch (op)
{
case 0:
{
break;
}
}
return answer;
}感谢您回答我的问题!
发布于 2017-11-29 10:16:26
在C#规范第13章“转换”中有一条规则:
13.1.3隐式枚举转换
隐式枚举转换允许将decimal-integer-literal 0转换为任何枚举类型。
所以0在这里是特殊的,这是其他整数所不能比拟的。
发布于 2017-11-29 10:12:42
尝尝这个。您需要一个缺省用例来处理传递到方法Test5中的所有其他MathOperator,这些方法当前不在您的switch语句中,我认为这就是您的用例中的问题所在。经验法则是有一个交换案例,它检查您的enum中列出的所有enum成员。
public double Test5(double num1, double num2, MathOperator op)
{
double answer=0;
switch (op)
{
// Use it like this.
case MathOperator.YourOperator:
{
break;
}
case MathOperator.Multiply:
{
break;
}
default:
{
// Other cases
}
}
return answer;
}https://stackoverflow.com/questions/47543904
复制相似问题