Оператор переключения fallthrough в C#?

Оператор переключения fallthrough является одной из моих персональных основных причин любви switch по сравнению с. if/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 должен быть объявлен вне функции: хорошо, они, это - просто пример.

Компилятор перестал работать со следующей ошибкой:

Control cannot fall through from one case label ('case 3:') to another
Control cannot fall through from one case label ('case 2:') to another

Почему? И есть ли любой способ получить этот вид поведения, не имея три ifs?

355
задан Matthew Scharley 6 October 2008 в 02:00
поделиться

2 ответа

После каждого оператора требуйте break или goto, даже если это случай по умолчанию.

0
ответ дан 23 November 2019 в 00:23
поделиться

Вы можете добиться провала, как в C ++, с помощью ключевого слова goto.

Пример:

switch(num)
{
   case 1:
      goto case 3;
   case 2:
      goto case 3;
   case 3:
      //do something
      break;
   case 4:
      //do something else
      break;
   case default:
      break;
}
0
ответ дан 23 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: