C# 默认值为真时无需按(自动循环)

C# 默认值为真时无需按(自动循环),c#,C#,我为一个菜单编写了这段代码,当我按I、U或R时,其中一个情况将实现,当你按Q时,它将返回主菜单。我的问题是,当默认值为true时,我希望它循环到主菜单,而不需要按Q,我尝试使用tast=Consolekey.Q 对不起,我的英语真的很糟糕很明显,你不能从循环中中断,因为break从开关语句中断,你肯定已经注意到了 两个简单的解决方案: 首先,添加一个布尔标志,指示应该退出循环,在while语句中添加一个新条件 string tastetryk; ConsoleKeyInfo tast; Con

我为一个菜单编写了这段代码,当我按I、U或R时,其中一个情况将实现,当你按Q时,它将返回主菜单。我的问题是,当默认值为true时,我希望它循环到主菜单,而不需要按Q,我尝试使用tast=Consolekey.Q


对不起,我的英语真的很糟糕

很明显,你不能从循环中
中断
,因为
break
开关
语句中断,你肯定已经注意到了

两个简单的解决方案:

首先,添加一个布尔标志,指示应该退出循环,在
while
语句中添加一个新条件

string tastetryk;

ConsoleKeyInfo tast;
Console.ForegroundColor = ConsoleColor.White;
Console.BackgroundColor = ConsoleColor.Blue;
Console.Clear();
do
{

     Console.WriteLine("Menu");
     Console.WriteLine(" ");
     Console.WriteLine("Tryk en tast for at vælge funktion");
     Console.WriteLine(" ");
     Console.WriteLine("I - Beregn strøm");
     Console.WriteLine("U - Spænding");
     Console.WriteLine("R - Modstand");
     Console.WriteLine(" ");
     Console.WriteLine("(Esc) for at slutte ");

     tast = Console.ReadKey();
     tastetryk = tast.Key.ToString();
     Console.Clear();

     switch(tastetryk)
     {
         case "I":
             Console.WriteLine("du har tastet I");
             Console.Write("Tast Q for at komme tilbage");
             tast = Console.ReadKey();
             break;

         case "U":
             Console.WriteLine("du har tastet U");
             Console.Write("Tast Q for at komme tilbage");
             tast = Console.ReadKey();
             break;

         case "R":
             Console.WriteLine("du har tastet R");
             Console.Write("Tast Q for at komme tilbage");
             tast = Console.ReadKey();
             break;

         default:
             Console.WriteLine("forkert tast");
             Thread.Sleep(1000);
             Console.Clear(); 
             break;
    }                
}
while (tast.Key == ConsoleKey.Q);
现在,我知道这可以被认为是纯粹的邪恶,但是。。。您是否考虑过使用
goto

bool bExit = false;

do
{
    switch 
    {
        /*
        code here
        */
        default:
            bExit = true;
            //etc.
    }
}
while(tast.Key == ConsoleKey.Q || !bExit)

我相信第二种解决方案实际上更干净,但人们可能会对
goto
语句做出激烈反应。

是的,我正要使用goto,但我们的老师告诉我们永远不要使用它……)这是普遍的看法,如果使用不当,它会生成很难维护的代码。另一方面,我也不太喜欢神奇的退出条件。通常我会告诉你用你最好的判断。。。但是如果这是家庭作业,那就听老师的,用第一种方法来代替!;)
do
{
    switch 
    {
         /*
         code here
         */
         default:
            goto outOfLoop;
    }
}
while(tast.Key == ConsoleKey.Q)

outOfLoop:

// etc.