C# 控制台应用程序中的菜单导航逻辑(前进、后退、退出)是否有一种简单的方法?

Is there a simple way for menu navigation logic (forward, rewind, exit) in C# console application?

我最近开发了一个小型 C# 控制台应用程序(大约 6000 行代码)。到目前为止,它工作完美但顺序。我想添加一个额外的维度。

要求。 用户必须输入值。输入值 XYZ 后,用户应该可以:

  1. 倒回(再次输入代码)
  2. 按 ENTER 键将出现下一个提示
  3. 按 ESC 键关闭程序

为了向您展示我的尝试,我做了一个小模型。到目前为止它运行完美我的问题很简单:

有没有更有效的方法来编码我编写的代码?我有一种感觉,就逻辑而言,我没有以非常高效的方式对其进行编程。由于这是大约的第一个“提示”,我会得到越来越多的嵌套。 10 个提示...

非常感谢...

// Getting car brand.
        try
        {
            while (programEnd == 0)
            {
                Console.Clear();
                model.Brand_definition(this.view.Brand_prompting());
                this.view.Selection();
                ConsoleKeyInfo select = Console.ReadKey(true);

                if (select.Key == ConsoleKey.Z)
                {
                }
                else if (select.Key == ConsoleKey.Enter)
                {
                    Console.WriteLine(" NEXT ");
                    Console.ReadKey();
                }
                else if (select.Key == ConsoleKey.Escape)
                {
                    programEnd = 1;
                    Console.Clear();
                    Console.WriteLine("  ");
                    Console.WriteLine("  ");
                    Console.WriteLine(" TEST OUTPUT - QUIT APP 1 ");
                    Thread.Sleep(2000);
                    Environment.Exit(0);
                }
                else
                {
                    int exiter = 0;
                    while (exiter == 0)
                    {
                        if (select.Key == ConsoleKey.Escape)
                        {
                            Console.Clear();
                            Console.WriteLine("  ");
                            Console.WriteLine("  ");
                            Console.WriteLine(" TEST OUTPUT - QUIT APP 2 ");
                            Thread.Sleep(2000);
                            Environment.Exit(0);
                        }
                        else if (select.Key == ConsoleKey.Enter)
                        {
                            Thread.Sleep(2000);
                            Console.Clear();
                            Console.WriteLine(" NEXT 2 ");
                        }
                        else if (select.Key == ConsoleKey.Z)
                        {
                            exiter = 1;
                        }
                        else
                        {
                            select = Console.ReadKey(true);
                        }
                    }
                }
            }
        }
        catch (Exception exEnd)
        {
            Console.WriteLine(" ERROR! ", exEnd);
            programEnd = 1;
        }

您可以重构代码并将部分代码提取到单独的方法中。例如,您可以提取 try 块内的代码:

try
    {
        RunApp();
    }
    catch (Exception exEnd)
    {
        Console.WriteLine(" ERROR! ", exEnd);
        programEnd = 1;
    }

然后在 RunApp 方法中你可以有这样的东西:

private void RunApp()
{
    while (programEnd == 0)
    {
        Console.Clear();
        model.Brand_definition(this.view.Brand_prompting());
        this.view.Selection();
        ConsoleKeyInfo select = Console.ReadKey(true);


        switch (select.Key)
        {
            case ConsoleKey.Z:
                Z_Case();
                break;
            case ConsoleKey.Enter:
                Enter_Case();
                break;
            case ConsoleKey.Escape:
                Escape_Case();
                break;
            default:
                Default_Case();
                break;
        }
    }
}

您可以根据需要传递给这些方法。