【发布时间】: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