无法从 ReadKey() 中仅读取一个字符

Trouble reading only one character from ReadKey()

我是 c# 新手,正在创建一个小型控制台应用程序。我想要一个顺畅的菜单系统来改变关键输入。我有一个循环注册

public void MainMenu()
{
    ConsoleKeyInfo _key;
    do
    {
        Console.WriteLine("Main Menu");
        Console.WriteLine("Press 1 for cars");
        Console.WriteLine("Press 2 for planes");
        Console.WriteLine("Press 3 for boats");
        Console.WriteLine("Enter 'q' to exit");
        _key = Console.ReadKey();
        switch ((char)_key.Key)
        {
            case '1':
                {
                    Console.Clear();
                    CarMenu();
                    break;
                }
            case '2':
                {
                    Console.Clear();
                    PlaneMenu();
                    break;
                }
            case '3':
                {
                    Console.Clear();
                    BoatMenu();
                    break;
                }
            case 'Q':
                {
                    Environment.Exit(0);
                    break;
                }
            default:
                {
                    Console.WriteLine("No options to that key...");
                    Console.WriteLine("-------------------------\n\n");
                    break;
                }
        }
    } while (true);
}

public void CarMenu()
{



    do
    {
        Console.Clear();
        Console.WriteLine("Car menu");
        Console.WriteLine("Press 1 to list all cars");
        Console.WriteLine("Press 2 to list single car");
        Console.WriteLine("Press 3 to register a new car");
        Console.WriteLine("Press 0 for main menu");
        Console.WriteLine("Enter 'q' to exit");
        _key = Console.ReadKey();
        Console.WriteLine((char)_key.Key);
        Console.ReadKey();
        switch ((char)_key.Key)
        {
            case '1':
                {
                    Console.Clear();
                    _handler.listAllDevices();
                    break;
                }
            case '2':
                {
                    Console.Clear();
                    PlaneMenu();
                    break;
                }
            case '3':
                {
                    Console.Clear();
                    BoatMenu();
                    break;
                }
            case '0':
                {
                    Console.Clear();
                    MainMenu();
                    break;
                }
            case 'Q':
                {
                    Environment.Exit(0);
                    break;
                }
            default:
                {
                    Console.WriteLine("No options to that key...");
                    Console.WriteLine("-------------------------\n\n");
                    break;
                }
        }
    } while (true);
}

我有几个案例,其中案例'1'和案例'Q'。第一次我按其中任何一个都有效,但下次我需要按 1 两次和 q 三次。无论是 SHIFT + q 还是 Caps Lock。我尝试了多种不同的解决方案,清除缓冲区等,但并没有真正取得多大成就。

我觉得很奇怪,但我想我漏掉了什么。有什么线索吗?谢谢

所以完整的片段是:

{
    private static void Main(string[] args)
    {
        do
        {
            Console.WriteLine("Main Menu");
            Console.WriteLine("Press 1 for cars");
            Console.WriteLine("Press 2 for planes");
            Console.WriteLine("Press 3 for boats");
            Console.WriteLine("Enter 'q' to exit");
            ConsoleKeyInfo _key = Console.ReadKey();

            switch ((char) _key.Key)
            {
                case '1':
                {
                    Console.Clear();
                    CarMenu();
                    break;
                }
                case '2':
                {
                    Console.Clear();
                    //PlaneMenu();
                    break;
                }
                case '3':
                {
                    Console.Clear();
                    //BoatMenu();
                    break;
                }
                case 'Q':
                {
                    Environment.Exit(0);
                    break;
                }
                default:
                {
                    Console.WriteLine("No options to that key...");
                    Console.WriteLine("-------------------------\n\n");
                    break;
                }
            }
        } while (true);
    }

    public static void CarMenu()
    {
        do
        {
            Console.Clear();
            Console.WriteLine("Car menu");
            Console.WriteLine("Press 1 to list all cars");
            Console.WriteLine("Press 2 to list single car");
            Console.WriteLine("Press 3 to register a new car");
            Console.WriteLine("Press 0 for main menu");
            Console.WriteLine("Enter 'q' to exit");
            ConsoleKeyInfo _key = Console.ReadKey();
            Console.WriteLine((char) _key.Key);
            //Console.ReadKey();
            switch ((char) _key.Key)
            {
                case '1':
                {
                    Console.Clear();
                    Console.WriteLine("1");
                    //_handler.listAllDevices();
                    break;
                }
                case '2':
                {
                    Console.Clear();
                    Console.WriteLine("1");
                    break;
                }
                case '3':
                {
                    Console.Clear();
                    Console.WriteLine("1");
                    break;
                }
                case '0':
                {
                    Console.Clear();
                    return;
                }
                case 'Q':
                {
                    Environment.Exit(0);
                    return;
                }
                default:
                {
                    Console.WriteLine("No options to that key...");
                    Console.WriteLine("-------------------------\n\n");
                    break;
                }
            }
        } while (true);
    }
}

如您所见,我已经对 ReadKey() 进行了第二次调用。这是原来的问题。