【问题标题】:Why in C# break is required in switch loop after default case? [duplicate]为什么在默认情况下切换循环中需要 C# 中断? [复制]
【发布时间】:2018-06-04 22:37:34
【问题描述】:

default 之后,控制权应该自动从switch loop 出来。但是 C# 需要使用 break 语句吗?为什么 C# 中的控件在 default 之后不会自动退出 switch loop

下面的微软文档这样说:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch

在我的代码中:

using System;

class Program {
static void Main() {
    Console.WriteLine("Enter a number between 1 and 10");
    int num;
    bool validity = int.TryParse(Console.ReadLine(), out num);
    if(validity==true) {
        switch(num) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            case 10:

                Console.WriteLine("You have entered {0}", num);
                break;
            default:
                Console.WriteLine("You have not entered a number between 1 and 10");
                //break; This part is commented
        }
    } 
    else {
        Console.WriteLine("Please make a valid input");
    }
}
} 

它给了我错误-

(23,5): error CS8070: Control cannot fall out of switch from final case label ('default:')

但是在取消注释中断部分时,代码可以正常工作。

【问题讨论】:

  • C# 语言规范只是禁止控制到达 switch 语句的}。这使得所有案例彼此更加一致,并且意味着它们更容易重新排序。您的default 案例是最后一个,这只是一个巧合。
  • 请注意,break 不是实现此目的的唯一方法。 throw new Exception(); 也将阻止控制到达}。那你就不需要break了。
  • 这与另一个问题类似,但似乎与它有点不同。另一个问题一般处理最后一种情况,但这个问题专门处理default。另一个问题的答案主要涉及这样一个事实,即要求对最后一个案例使用break 语句通常有助于重构和一致性,如果最后一个标签不是default,这是正确的。不过,他们似乎没有解决为什么没有以 default 的语言提供异常。

标签: c# switch-statement default break


【解决方案1】:
switch(num) {
    case 1:
        DoSomething();
    case 2:
        DoSomething2();
    case 3:
    case 4:
    case 5:
        Console.WriteLine("You have entered {0}", num);
        break;
    default:
        Console.WriteLine("You have not entered a number between 1 and 10");
        //break; This part is commented
    case 6:
        DoSomething3();
}

在上面的代码中,如果您只需要DoSomething()DoSomething() 并转到案例2?避免此类错误(忘记休息)。

您可以在default 之后阻止另一个案例,您可以忘记添加中断。

【讨论】:

  • C# 禁止掉线,除了空的情况(比如你这里的 3 和 4)。
  • 这需要break 用于案例 1、案例 2、默认值和案例 6。我不确定这里的意思。
猜你喜欢
  • 1970-01-01
  • 2014-02-25
  • 2016-02-13
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多