-2

我不知道为什么会收到以下错误:

控制不能从一个案例标签 ('case "h":') 转移到另一个 (CS0163)

仅适用于 H 和 S - 很奇怪。

switch(myChoice)
{
    case "K":
    case "k":
        Console.WriteLine("You have chosen the Kanto region");
        break;
    case "O":
    case "o":
        Console.WriteLine("You have chosen the Orange Islands");
        break;
    case "J":
    case "j":
        Console.WriteLine("You have chosen the Johto region");
        break;
    case "H":
    case "h":
        Console.WriteLine("You have chosen the Hoenn region");
    case "S":
    case "s":
        Console.WriteLine("You have chosen the Sinoh region");
    case "U":
    case "u":
        Console.WriteLine("You have chosen the Unova region");
        break;
    case "R":
    case "r":
        Console.WriteLine("Return");
        break;
    default:
        Console.WriteLine("{0} is not a valid choice", myChoice);
        break;
}
4

6 回答 6

14

Fallthrough 仅在 case 语句没有正文时有效。由于您的“h”和“s”案例存在代码,因此您需要break在它们之后。

此外,作为一个建议:您可以String.ToUpper()对您的switch参数执行 a ,这样您就可以避免检查myChoice. 你的switch陈述然后变成:

switch(myChoice.ToUpper())
{
    case "K":
        Console.WriteLine("You have chosen the Kanto region");
        break;
    case "O":
        ...
}
于 2012-06-18T18:04:41.337 回答
10

你错过了breaks 和 h 案例之后

于 2012-06-18T18:04:09.580 回答
2

您在break;switch 语句的文档中缺少一个 - “与 C++ 不同,C# 不允许从一个 switch 部分继续执行到下一个部分。”

于 2012-06-18T18:06:03.483 回答
1

您忘记了 H 和 S 之间的 break 语句。

于 2012-06-18T18:04:35.707 回答
1

你错过了

break;

陈述...

case "H":
case "h":
     Console.WriteLine("You have chosen the Hoenn region");
     break;
case "S":
case "s":
     Console.WriteLine("You have chosen the Sinoh region");
break;
于 2012-06-18T18:05:28.300 回答
1

在 case "H" 之后添加一个 goto case "h" 在 case "S" 之后添加一个 goto case "s"

case "H":
    goto case "h";
case "h":
    Console.WriteLine("You have chosen the Hoenn region");
    break;
case "S":
    goto case "s";
case "s":
     Console.WriteLine("You have chosen the Sinoh region");
break;

是的,使用 C# 的 goto 又回来了!

于 2017-12-19T16:29:40.147 回答