C#召回方法导致程序退出

C#召回方法导致程序退出,c#,recursion,menu,C#,Recursion,Menu,我一直在编写一个文本冒险游戏。当程序运行时,调用Boot()方法,读取%APPDATA%.ilan\t设置文件(同时只有username.txt)。在Boot()之后,它转到main menu(),用户可以在这里选择播放、转到选项或退出。当用户转到“选项”菜单并返回,然后尝试玩游戏或返回“选项”菜单时,游戏退出,这是不应该发生的 Boot()=第455行 main菜单()=第579行 Main()=第504行 我认为这是因为int是在方法本身中声明的,并且因为该方法被多次调用,int变量保留其先

我一直在编写一个文本冒险游戏。当程序运行时,调用
Boot()
方法,读取%APPDATA%.ilan\t设置文件(同时只有username.txt)。在
Boot()
之后,它转到
main menu()
,用户可以在这里选择播放、转到选项或退出。当用户转到“选项”菜单并返回,然后尝试玩游戏或返回“选项”菜单时,游戏退出,这是不应该发生的
Boot()
=第455行
main菜单()
=第579行
Main()
=第504行

我认为这是因为
int
是在方法本身中声明的,并且因为该方法被多次调用,
int
变量保留其先前的值。有什么办法可以解决这个问题吗?

在第610行,您检索MainMenu方法的结果,然后在第617行调用OptionMenu方法,但是一旦OptionMenu()方法触发,您就不会做任何其他事情来阻止应用程序在控件返回Main()方法后结束。即使在OptionMenu()方法中调用MainMenu(),也不会对该调用的结果进行任何评估,因此只需将菜单写入控制台并返回Main()。您需要在Main()方法中放置一个循环,该循环将重复调用MainMenu()方法,评估所选结果,其他菜单选项(如OptionMenu())将返回到此循环,而不是调用主菜单本身。大概是这样的:

string whatToDo = "null";
bool exitApp = false;
while (!exitApp)
{
    whatToDo = AdvTime.MainMenu();
    if (whatToDo.Contains("play"))
    {
        Menu("null", false);
    }
    if (whatToDo.Contains("options"))
    {
        AdvTime.OptionMenu();
    }
    if (whatToDo.Contains("exit"))
    {
        exitApp = true;
    }
    if (whatToDo.Contains("null"))
    {
        AdvTime.MMError("OM");
    }
}

publicstaticvoidmain()
中没有循环。在这个方法中放置一个断点并使用step over,您将看到哪里出了问题。编辑:也就是说,你真的需要重新思考你的整个架构…我知道我的架构很烂,我只是个初学者。。(我不知道如何改进我的代码,所以我照原样做)如果你在pastebin更新你的代码,我会再看一看。最终,所有内容都应该返回到这个循环,循环并再次调用MainMenu(),直到用户选择退出。如果您在其他地方调用Environment.Exit(),则可能会绕过此循环。我不知道为什么它不起作用,我也试着把OptionMenu()放在一个while循环中,但同样的问题。我能够剪切和粘贴你的代码并按原样运行它,它起作用了。不过这有点让人困惑,因为在
OptionMenu()
中调用
MainMenu()
,它会一直阻塞,直到您输入一个菜单项,然后返回到主循环,再次调用
MainMenu()
。我删除了对
OptionMenu()
中的
main menu()
的调用,它运行得更好。您应该删除调用
MainMenu()
,但不实际计算返回值的任何位置(如
MMError()
),以便所有嵌套方法调用都可以完成并返回到主循环。