Quiero modificar una aplicación de consola, para modularizarla (en C#). La salida debe pedir entrada por módulo para que haya dos pasos antes de llegar a la operación. El primero es Módulo y el segundo es Operación en ese Módulo. Por ejemplo, la salida actual es:
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 CEstoy usando la declaración de cambio de caso para elegir una opción en la entrada del usuario y realizar una operación en ella. Después de la modularización, quiero obtener un resultado como:
1. A 2. B 3. CDespués de seleccionar 1 como entrada de usuario, la salida debería ser como:
1.1. Add element to A 1.2. View all elements of Ay así sucesivamente para el resto de las entradas del usuario. Ahora de nuevo cuando entro en 1.1. o 1.2., se realiza la operación final y se llama al método. ¿Cómo debo proceder?
Si lo entendí correctamente, desea crear un menú interactivo CLI (interfaz de línea de comandos) con submenús.
Para ese propósito, puede buscar en línea un marco C# MVC CLI con las funciones que desea (algunas buenas palabras clave para buscar en Google podrían ser " c# cli menu " y frases equivalentes)
Si desea implementarlo usted mismo, considere primero una separación de la interfaz de usuario y la lógica. Sus clases de IU solo deben preocuparse por el estado actual de la IU y las entradas del usuario. Para llamar a la lógica dinámicamente, un diccionario de devoluciones de llamada en la clase Vista podría ser una solución simple, como en el momento de la confirmación, dado el estado actual de las devoluciones de llamada [selección] si se cumplen los criterios.
Como nota final, creo que lo estás sobredimensionando. Una sangría más simple podría hacer el truco más fácilmente, ya que estamos hablando de una CLI.
1. A 1.1 view member 1.2 add member 2. B 2.1 whateverSi solo desea un menú de cambio simple, solo vea mi demostración:
Siéntase libre de modificar este código de acuerdo a sus necesidades.
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; } } } }Producción:
Si tiene preguntas sobre mi código, por favor comente a continuación.