切换声明在C#中落后?

切换声明在C#中落后?

切换声明是我喜爱switchif/else if构造的个人主要原因之一。这里有一个例子:

static string NumberToWords(int number){
    string[] numbers = new string[] 
        { "", "one", "two", "three", "four", "five", 
          "six", "seven", "eight", "nine" };
    string[] tens = new string[] 
        { "", "", "twenty", "thirty", "forty", "fifty", 
          "sixty", "seventy", "eighty", "ninety" };
    string[] teens = new string[]
        { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
          "sixteen", "seventeen", "eighteen", "nineteen" };

    string ans = "";
    switch (number.ToString().Length)
    {
        case 3:
            ans += string.Format("{0} hundred and ", numbers[number / 100]);
        case 2:
            int t = (number / 10) % 10;
            if (t == 1)
            {
                ans += teens[number % 10];
                break;
            }
            else if (t > 1)
                ans += string.Format("{0}-", tens[t]);
        case 1:
            int o = number % 10;
            ans += numbers[o];

            break;
        default:
            throw new ArgumentException("number");
    }
    return ans;}

聪明的人正在畏缩,因为string[]s应该在函数之外声明:嗯,他们是,这只是一个例子。

编译器失败并出现以下错误:

控制不能从一个案例标签('案例3:')落到另一个案例标签
控制不能从一个案例标签('案例2:')落到另一个案例标签

为什么?有没有办法在没有三个ifs的情况下获得这种行为?


千巷猫影
浏览 368回答 3
3回答

牛魔王的故事

通过下降switch- caseS可通过不具有代码在一个来实现case(见case 0),或者使用特殊的goto case(见case 1)或goto default(见case 2)形式:switch (/*...*/) {     case 0: // shares the exact same code as case 1     case 1:         // do something         goto case 2;     case 2:         // do something else         goto default;     default:         // do something entirely different         break;}

梵蒂冈之花

交换机漏洞历史上是现代软件中错误的主要来源之一。语言设计者决定强制要求在案例结束时跳转,除非您在没有处理的情况下直接默认为下一个案例。switch(value){     case 1:// this is still legal     case 2:}
打开App,查看更多内容
随时随地看视频慕课网APP