我正在尝试运行一些代码来更改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
。
就你所展示的代码而言,这看起来不仅仅是一个小小的怀疑
为什么不在你的输入上使用switch
并完成它
while(true)
{
switch(Console.ReadKey())
{
case ConsoleKey.M :
// do M stuff
break;
...
如果您需要状态机或更复杂的层次结构,我建议将其分解为更多逻辑单元,而不是尝试在一个循环中执行所有操作
我建议将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