switch-case 是否足以在控制台应用程序中创建多个步骤以进行模块化?

Is switch-case sufficient to create multiple steps in a console app for modularization?

我想修改一个控制台应用程序,将其模块化(在 C# 中)。 输出应该要求模块输入,以便在到达操作之前有两个步骤。首先是模块,第二是对该模块的操作。例如当前输出是:

1. Add a member to A
2. View all members of A
3. Add a member to B
4. View all members of B
5. Add a member to C
6. View all members of C

我正在使用 switch case 语句在用户输入中选择一个选项并对其执行操作。模块化后,我想得到这样的输出:

1. A
2. B
3. C

选择 1 作为用户输入后,输出应如下所示:

1.1. Add element to A
1.2. View all elements of A

其余的用户输入依此类推。现在再次输入 1.1。或 1.2.,执行最终操作并调用方法。我该怎么办?

如果我没记错的话,您想创建一个带有子菜单的交互式 CLI(命令行界面)菜单。

为此,您可以在线查找具有所需功能的 C# MVC CLI 框架(一些好的谷歌搜索关键字可能是“c# cli menu”和等效的措辞)

如果要自己实现,先考虑UI和Logic分离。 您的 UI classes 应该只关心 UI 当前状态和用户输入。 为了动态调用逻辑,视图 class 中的回调字典可能是一个简单的解决方案,如 确认后,给定当前状态调用回调 [选择] 如果满足条件

作为结束语,我认为您设计过度了。一个更简单的缩进可以更容易地做到这一点,因为我们正在谈论 CLI。

1. A
   1.1 view member
   1.2 add member
2. B
   2.1 whatever

如果你只是想要一个简单的切换菜单,请看我的演示:

您可以根据需要随意修改此代码。

using System;

namespace ConsoleApp5
{
    internal class Program
    {
        static void Main(string[] args)
        {
            MainMenu();
            Console.ReadLine();
            int MainMenu()
            {
                while (true)
                {
                    Console.WriteLine("\nPlease select menu item (key in 1-3): ");
                    Console.WriteLine("1.A");
                    Console.WriteLine("2.B");
                    Console.WriteLine("3.C");
                    int choice; 
                    int.TryParse(Console.ReadLine(),out choice);
                    switch (choice)
                    {
                        case 1: AMenu(); break;
                        case 2://to do
                                break;
                        case 3://to do
                                break;

                        default: Console.WriteLine("\nInvalid input!\n"); break;
                    }
                    Console.WriteLine("\nIf you want to continue, press y, otherwise, press any other key!");

                    string ct = Console.ReadLine();
                    if (ct != "y")
                        break;
                }
                return 0;
            }

            int AMenu()
            {
                while (true)
                {
                    Console.WriteLine("\nPlease select menu item (key in 1.1-1.2): ");
                    Console.WriteLine("1.1. Add element to A");
                    Console.WriteLine("1.2. View all elements of A");
                    double choice;
                    double.TryParse(Console.ReadLine(), out choice);
                    if (choice == 1.1) choice = 1;
                    else if (choice == 1.2) choice = 2;
                    switch (choice)
                    {
                        case 1: Console.WriteLine("Add element to A"); ; break;
                        case 2: Console.WriteLine("View all elements of A"); break;
                        default: Console.WriteLine("\nInvalid input!\n"); break;
                    }
                    Console.WriteLine("\nIf you want to continue, press y, otherwise, press any other key!");
                    string ct = Console.ReadLine();
                    if (ct != "y")
                        break;
                }
                return 0;
            }
        }
    }
}

输出:

如果您对我的代码有任何疑问,请在下面发表评论。