【问题标题】:Case 0 in Switch Statement [duplicate]Switch 语句中的案例 0 [重复]
【发布时间】:2017-11-29 02:06:25
【问题描述】:

我在 C# 中使用 switch 语句,我意识到,虽然 switch 语句中传递的变量是一个枚举,但 switch 语句不会对 case 0 抛出错误,但会在 case 1,2 中抛出错误, 3... 我想知道为什么会这样。 我知道如何在 switch 案例中使用枚举,我不需要帮助,我想知道为什么它不抛出 0 错误。因为 0 是整数。

这是代码,编译时没有任何错误。 MathOperator 是一个枚举。

 public double Test5(double num1, double num2, MathOperator op)
    {
        double answer=0;
        switch (op)
        {

            case 0:
                {
                    break;
                }

        }
        return answer;
    }

感谢您回答我的问题!

【问题讨论】:

  • 不要使用 0,1,2,3,...,而是尝试在您的情况下使用枚举名称
  • 您应该包括错误和MathOperator 的声明,因为它们都明显相关。以及@lamandy 所说的:)

标签: c# enums switch-statement


【解决方案1】:

C#规范第13章“转换”中有一条规则:

13.1.3 隐式枚举转换
隐式枚举转换允许将十进制整数文字 0 转换为任何枚举类型。

所以 0 在这里是特殊的,这是其他整数文字所没有的。

【讨论】:

    【解决方案2】:

    试试这个。您需要一个默认情况来处理传递给方法Test5 的所有其他MathOperator,该方法当前不在您的switch 语句中,我认为这是您的情况的问题。经验法则是有一个 switch case 来检查您的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;
    }
    

    【讨论】:

    • 并没有真正回答为什么0 被允许的问题,但其他的则不是。目前找不到规范中解释这一点的部分,但0 是一个特例。
    • @KirkWoll 感谢您指出这一点,已更新。
    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2014-03-15
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多