C# 中途离开?

C# 中途离开?,c#,C#,我无法跳出代码中的While循环和方法。用户可以选择输入1或2,选择0取消退出菜单和方法。但是,正如现在的代码一样,我猜开关中的默认选项会阻止它离开While循环!?我能用另一种更好的方法吗 // Read user input public void ReadUserInput() { Console.Write("Your choice? "); int choice = -1; while (choice !=

我无法跳出代码中的While循环和方法。用户可以选择输入1或2,选择0取消退出菜单和方法。但是,正如现在的代码一样,我猜开关中的默认选项会阻止它离开While循环!?我能用另一种更好的方法吗

        // Read user input
    public void ReadUserInput()
    {
        Console.Write("Your choice? ");
        int choice = -1;
        while (choice != 0)
        {
            if (int.TryParse(Console.ReadLine(), out choice))
            {
            switch (choice)
            {
                case 1:           
                    ShowSchedule(1);
                    break;

                case 2:
                    ShowSchedule(2);
                    break;

                default:
                    ErrorMessage(); // Call method to show error message
                    ReadUserInput(); // Call method for new input
                    break;      
            }
            }
            else
            {
                // Call method to show error message
                ErrorMessage();
                Start();
            }
        }
    }
只需添加一个

case 0:
    break;
如果用户输入0,则退出循环。如果方法中确实没有应该在循环之后运行的代码,您也可以使用

case 0:
    return;
只需添加一个

case 0:
    break;
如果用户输入0,则退出循环。如果方法中确实没有应该在循环之后运行的代码,您也可以使用

case 0:
    return;
您可以使用return关键字完全退出函数。

您可以使用return关键字完全退出函数。

只需放置初始控制台。在循环中写入,不要递归调用ReadUserInput。

只需放置初始控制台。在循环中写入,不要递归调用ReadUserInput。

如果要中断开关和while,只需在此处使用return关键字:

while (choice != 0)
{
    if (int.TryParse(Console.ReadLine(), out choice))
    {
       switch (choice)
       {
            case 0:
               return; //returns from the FUNCTION! So from the switch AND while
            ....

            ....

            ....
       }
    }
}
如果要中断swith和while,只需在此处使用return关键字:

while (choice != 0)
{
    if (int.TryParse(Console.ReadLine(), out choice))
    {
       switch (choice)
       {
            case 0:
               return; //returns from the FUNCTION! So from the switch AND while
            ....

            ....

            ....
       }
    }
}


这不会破坏开关而不是时间吗?@moguzalp我认为“也会破坏时间”不是通过条件评估为false退出循环的官方术语,但是的,这就是重点。谢谢,但这不起作用!现在,如果用户输入4或任何不需要的符号(如A),我不会收到错误消息?这是怎么回事?如果用户输入4,则采用默认分支,并显示错误消息和重复。如果输入“A”,则TryParse返回false,因此else分支会给出错误消息。如果它与该代码的行为不同,则不太可能是框架中的错误。如果0是第一个输入的数字,则它可以工作,但如果我输入2,然后当它等待新的选择并输入0时,它只要求新的选择!?这不会破坏开关而不是时间吗?@moguzalp我认为“也会破坏时间”不是通过条件评估为false退出循环的官方术语,但是的,这就是重点。谢谢,但这不起作用!现在,如果用户输入4或任何不需要的符号(如A),我不会收到错误消息?这是怎么回事?如果用户输入4,则采用默认分支,并显示错误消息和重复。如果输入“A”,则TryParse返回false,因此else分支会给出错误消息。如果它与该代码的行为不同,则不太可能是框架中的错误。如果0是第一个输入的数字,则它可以工作,但如果我输入2,然后当它等待新的选择并输入0时,它只要求新的选择!?您是否已完成代码执行并通过循环观察到变量的值?是否已完成代码执行并通过循环观察到变量的值?谢谢,但这不起作用。如果我输入0,它仍然要求新的输入?对我有效-你确定你删除了额外的ReadUserInput调用吗?谢谢,但这不起作用。如果我输入0,它仍然要求新的输入?对我来说很有效-你确定你删除了额外的ReadUserInput调用吗?当然,不管你想在哪里留下该方法。我想这应该在默认部分中,在中断之前,或者替代它。我想这应该是在默认区域中,在中断之前,或者可能是代替它。第一次可以正常工作,但是当我第三次输入0时,在输入1或2之后,它就不工作了@3D Krativ:不太清楚你的用户交互是如何工作的,所以。您确定在1、2之后,Console.ReadLine/ReadChar再次调用,以便从用户处获得新的输入吗?问题解决了!我是对一个方法的调用,该方法使用输入初始化该方法。现在它在没有case 0:return的情况下运行良好,我想当While语句等待输入0时,它应该在没有case 0:return的情况下运行。正当谢谢你的帮助!第一次可以正常工作,但是当我第三次输入0时,在输入1或2之后,它就不工作了@3D Krativ:不太清楚你的用户交互是如何工作的,所以。您确定在1、2之后,Console.ReadLine/ReadChar再次调用,以便从用户处获得新的输入吗?问题解决了!我是对一个方法的调用,该方法使用输入初始化该方法。现在它在没有case 0:return的情况下运行良好,我想当While语句等待输入0时,它应该在没有case 0:return的情况下运行。正当谢谢你的帮助!