switch语句,break语句是必须加的,为何系统不自动加上呢?
------------------------------------
有一点我不明白,就是这个break语句必须手工加上,否则就会报错,编译不过去。
可是如果不论何种情况都要加上的话,这条语句的存在又有何必要呢?
1.系统完全可以省了这条语句,每个case后自动退出就行了(别的语言就是这样处理的,比如vb等)
2.系统可以自动加上break语句。但是c#没有这样做,这条语句必须手工加上,这是为什么呢?
因为如果这条语句无论何时都要有的话,就完全没有存在必要了,在每个case语句后直接退出就行了。这完全可以通过编译器实现 呀?

解决方案 »

  1.   

    关键是并不是必须要加上break的
    例如你的分支以return、throw、goto等结束的时候
    switch(x){
    case 1:
       ....
       break;
    case 2:
       ....
       return;
    }
    还有连续多个case的时候,前面的case不需要加break
    switch(x){
    case 1:
    case 2:
       ....
       break;
    case 3:
       ....
       break;
    }
      

  2.   

    当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。 
    当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环体
    语句体从选定的语句开始执行,直到 break 将控制传递到 case 体以外。在每一个 case 块(包括上一个块,不论它是 case 语句还是 default 语句)的后面,都必须有一个跳转语句(如 break)。但有一个例外,(与 C++ switch 语句不同)C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。这个例外是当 case 语句中没有代码时。
      

  3.   

    private void ShowTest(Relation relation)
    {
     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
    }
      

  4.   

    private void ShowTest(string MyOperator)
    {
     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;
     }
    }
      

  5.   

    看了上面的示例你应该明白了吧,你的那个如果是不成立的,break有的时候还不能出现!
      

  6.   

    支持。当
                  case 1:
                case 2: 
                case 3: 
                    Console.WriteLine("It's 1, 2, or 3.");
                    break; 
    时,空 case 标签可以从一个 case 标签贯穿到另一个;即当值为1 或 2,都将执行 case 3 ,当然不要
    加break;了。
      

  7.   

    用Switch时,怎么只写前面的switch系统就可以自动的帮我把后面的case语句写出呀?