C#控制台应用NFLReportsApp选择Quit无法完全退出主循环问题求助
C#控制台应用NFLReportsApp退出异常修复方案
问题根因
代码存在两套完全独立的菜单执行逻辑,流程冲突导致无法正常退出:
Main方法主循环先调用ShowMenu(),该方法内部自带循环接收用户文本指令,用户输入Quit后仅会结束ShowMenu内部的循环,方法会返回到Main。Main在ShowMenu()返回后,会立刻调用GetMenuOption()等待用户输入数字,此时用户无输入预期,任意非数字输入都会触发该方法的else分支输出无效提示,只有主动输入4才会触发Main里的退出逻辑,这就是异常的直接原因。- 冗余问题:
ShowMenu内已经实现了球员搜索、球队查看功能,和Main里switch分支的1-3选项逻辑完全重复,属于无效代码。
修复方案
直接删除冗余的数字菜单逻辑,统一使用ShowMenu的文本菜单控制程序生命周期即可,修改后的核心代码如下:
1. 修改ShowMenu方法,增加退出控制
// 方法返回值标识是否需要继续运行程序,返回false则退出 public static bool ShowMenu() { var reader = new ReadFromFile(); var engine = new PlayerSearchEngine(); Console.WriteLine("Type: Search NFL Player, Cleveland Browns or Quit?"); var action = Console.ReadLine(); if (action == "Search NFL Player") { Console.WriteLine("Which player would you like to search for?"); var Name = Console.ReadLine(); var players = engine.SearchPlayers(Name); DisplayPlayers(players); } else if (action == "Cleveland Browns") { reader.ReadFromText(); } else if (action == "Quit") { // 返回false通知Main退出 return false; } else { Console.WriteLine(action + " is not a valid command"); } // 其他情况继续运行 return true; }
2. 简化Main方法,删除冗余逻辑
static void Main(string[] args) { // 直接循环调用ShowMenu,返回false时退出程序 while (ShowMenu()) { // 无需额外逻辑,所有操作都在ShowMenu中处理 } // 循环结束直接退出 }
3. 可删除的冗余代码
修改完成后,以下冗余方法和逻辑可以直接删除,避免后续逻辑混乱:
GetMenuOption()方法GetPlayerSearchName()方法(已合并到ShowMenu的球员搜索逻辑中)- 原Main方法中的switch分支逻辑
GetTextSearch()方法(原逻辑未实现且无调用需求)
内容的提问来源于stack exchange,提问作者Blare Robinson
相关产品推荐
相关产品推荐

