switch语句,break语句是必须加的,为何系统不自动加上呢?
------------------------------------
有一点我不明白,就是这个break语句必须手工加上,否则就会报错,编译不过去。
可是如果不论何种情况都要加上的话,这条语句的存在又有何必要呢?
1.系统完全可以省了这条语句,每个case后自动退出就行了(别的语言就是这样处理的,比如vb等)
2.系统可以自动加上break语句。但是c#没有这样做,这条语句必须手工加上,这是为什么呢?
因为如果这条语句无论何时都要有的话,就完全没有存在必要了,在每个case语句后直接退出就行了。这完全可以通过编译器实现 呀?
------------------------------------
有一点我不明白,就是这个break语句必须手工加上,否则就会报错,编译不过去。
可是如果不论何种情况都要加上的话,这条语句的存在又有何必要呢?
1.系统完全可以省了这条语句,每个case后自动退出就行了(别的语言就是这样处理的,比如vb等)
2.系统可以自动加上break语句。但是c#没有这样做,这条语句必须手工加上,这是为什么呢?
因为如果这条语句无论何时都要有的话,就完全没有存在必要了,在每个case语句后直接退出就行了。这完全可以通过编译器实现 呀?
例如你的分支以return、throw、goto等结束的时候
switch(x){
case 1:
....
break;
case 2:
....
return;
}
还有连续多个case的时候,前面的case不需要加break
switch(x){
case 1:
case 2:
....
break;
case 3:
....
break;
}
当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环体
语句体从选定的语句开始执行,直到 break 将控制传递到 case 体以外。在每一个 case 块(包括上一个块,不论它是 case 语句还是 default 语句)的后面,都必须有一个跳转语句(如 break)。但有一个例外,(与 C++ switch 语句不同)C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。这个例外是当 case 语句中没有代码时。
{
switch(relation)
{
case Relation.Dad:
case Relation.Mum:
case Relation.ElderSister:
case Relation.ElderBrother:
MessageBox.Show("Dear Relative");
break;
case Relation.ClassMate:
MessageBox.Show("Hi ClassMate");
break;
case Relation.Friends:
MessageBox.Show("Hey Man");
break;
case Relation.NetFriends:
MessageBox.Show("The Internet So Interesting");
break;
case Relation.GameFriends:
MessageBox.Show("See you in WOW");
break;
case Relation.UnKnow:
MessageBox.Show("Nice to meet you");
break;
default:
MessageBox.Show("Oh Shit...");
break;
}
}public enum Relation
{
Dad,
Mum,
ElderSister,
ElderBrother,
ClassMate,
Friends,
NetFriends,
GameFriends,
UnKnow
}
{
switch(MyOperator)
{
case "+":
case "-":
case "*":
case "/":
MessageBox.Show("这是四则运算,我没必要一个一个的MessageBox.Show来提示。");
break;
case "Sin":
case "Cos":
case "Tan":
MessageBox.Show("这是三角函数");
break;
case "&&":
case "||":
case "!":
MessageBox.Show("这是逻辑运算符");
break;
default:
MessageBox.Show("其它字符串,And you know it usful,now?");
break;
}
}
case 1:
case 2:
case 3:
Console.WriteLine("It's 1, 2, or 3.");
break;
时,空 case 标签可以从一个 case 标签贯穿到另一个;即当值为1 或 2,都将执行 case 3 ,当然不要
加break;了。