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

C# do-while循环中结合ConsoleKey实现switch按键选择时的异常问题

问题根因
  • 按键读取方法Console.ReadKey()放置在do-while循环外部,程序仅会在启动时捕获一次按键输入,循环运行过程中不会再读取新的按键操作,会触发死循环或无法响应后续按键的异常。
  • 控制台输出提示与实际匹配的按键不符:提示要求选择1-2,但实际switch分支判断的是ConsoleKey.X和ConsoleKey.Y,会导致用户操作预期错位。
修复方案

将按键读取逻辑移入循环内部,同时修正提示文本,修复后的代码如下:

static void Main(string[] args)
{
    Console.WriteLine("Attention");
    Console.WriteLine("按下X执行动作1,按下Y执行动作2,按下ESC退出");
    ConsoleKey inputKey;
    do
    {
        // intercept: true 表示按下的字符不显示在控制台中,可根据需要调整为false
        var inputData = Console.ReadKey(intercept: true);
        inputKey = inputData.Key;
        switch (inputKey)
        {
            case ConsoleKey.X:
                Console.WriteLine("action 1");
                break;
            case ConsoleKey.Y:
                Console.WriteLine("action 2");
                break;
            case ConsoleKey.Escape:
                Console.WriteLine("即将退出程序");
                break;
            default:
                Console.WriteLine("Default");
                break;
        }
    } while (inputKey != ConsoleKey.Escape);
}

修复后每次循环都会优先读取用户最新按下的按键,再执行对应的switch分支,按下ESC键时自动退出循环。

内容的提问来源于stack exchange,提问作者BegCodde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:04