You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:54:04