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;
}
}
}
}
输出:
如果您对我的代码有任何疑问,请在下面发表评论。
我想修改一个控制台应用程序,将其模块化(在 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;
}
}
}
}
输出:
如果您对我的代码有任何疑问,请在下面发表评论。