是否可以在案例中更改开关变量?

问题描述 投票:0回答:2

我正在尝试运行一些代码来更改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

c# switch-statement
2个回答
0
投票

就你所展示的代码而言,这看起来不仅仅是一个小小的怀疑

为什么不在你的输入上使用switch并完成它

while(true) 
{

  switch(Console.ReadKey()) 
  {
     case ConsoleKey.M :
       // do M stuff
       break;
     ...

如果您需要状态机或更复杂的层次结构,我建议将其分解为更多逻辑单元,而不是尝试在一个循环中执行所有操作


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

© www.soinside.com 2019 - 2024. All rights reserved.