我正在尝试运行一些代码来将switch变量更改为跳到我想要的任何情况。我有种误解的感觉。
int option = 0;
while(true) {
switch(option) {
case 0:
ConsoleKeyInfo TurnChoice = Console.ReadKey();
switch(TurnChoice.key)
{
case ConsoleKey.M
option = 2;
break;
case ConsoleKey.S
option = 1;
break;
}
break;
case 1:
/* run some code */
break;
case 2:
/* run some code */
...
我希望在按下case: 2
键时它会跳到M
,但它只会不断循环case: 0
。
答案 0 :(得分:0)
仅在您显示的代码上,这看起来就有点怀疑了
为什么不输入switch
并完成输入
while(true)
{
switch(Console.ReadKey())
{
case ConsoleKey.M :
// do M stuff
break;
...
如果您需要状态机或更复杂的层次结构,我建议将其分解为更多的逻辑单元,而不是尝试在一个循环中做所有事情
答案 1 :(得分:0)
我建议将switch
变成if / else
,在这里您可以合法地修改option
:
while (true) {
if (0 == option) {
ConsoleKeyInfo TurnChoice = Console.ReadKey();
if (TurnChoice.key == ConsoleKey.M)
option = 2;
else if (TurnChoice.key == case ConsoleKey.S)
option = 1;
}
if (1 == option) {
...
}
else if (2 == option) { // drop "else" if option can be changed within if (option == 1)
...
}
}
另一种(不太可读的)可能性是放continue
而不是break
:
while(true) {
switch(option) {
case 0:
ConsoleKeyInfo TurnChoice = Console.ReadKey();
switch(TurnChoice.key)
{
case ConsoleKey.M
option = 2;
continue; // <- continue instead of break
case ConsoleKey.S
option = 1;
continue; // <- continue instead of break
}
...
在这种情况下,我们将option
更改为while
,然后重新输入switch