Я использую вложенные операторы switch в моей программе.По какой-то причине внутренние операторы switch не работают.
Ожидаемое поведение: при запуске программы пользователю предоставляется 5 опций;A: SUBJECTS, B: STUDENTS, C: ENROLMENT, D: GRADES_RECORD E: EXIT
.Из этих опций A, B, C и D содержат дополнительные операторы переключения.Возьмем для примера case A: SUBJECTS
.После того, как случай A был выбран, пользователю предоставляется еще 3 варианта;A: ADD_SUBJECTS, B: EDIT_SUBJECTS and C: DELETE_SUBJECTS
.Затем пользователь выбирает один из этих параметров, после чего выполняется некоторый код.Допустим, например, что пользователь выбирает A, он будет проходить процедуру добавления темы в пул субъектов.
Фактическое поведение: при запуске программы отображается начальное приглашение A: SUBJECTS, B: STUDENTS, C: ENROLMENT, D: GRADES_RECORD E: EXIT
, запрашивающее пользователявыбрать дело.Как только пользователь выбирает регистр, ему выводится второе приглашение, которое относится к выбранной опции.Например, если пользователь выбрал A в первом приглашении, отображается второе приглашение A: ADD_SUBJECTS, B: EDIT_SUBJECTS and C: DELETE_SUBJECTS
.Отлично, вот как я хочу, чтобы это работало.Но вот проблема.Когда пользователь теперь выбирает параметр, независимо от того, какой параметр был выбран, программа действует так, как будто выбран случай ADD_SUBJECT
, и проходит через код для этого.Это для родительского случая A: SUBJECTS
.Что касается остальных родительских наблюдений, отображается соответствующее дочернее приглашение, но любой ввод / выбор дочернего запроса приводит к отображению начального приглашения A: SUBJECTS, B: STUDENTS, C: ENROLMENT, D: GRADES_RECORD E: EXIT
, к которому он вообще не обращается ни к одному из внутренних наблюдений.
См. Код ниже:
static void Main(string[] args)
{
Console.Title = "Students Record";
LoadJson();
Run();
}
static void Run()
{
while (true)
{
var consoleInput = ReadFromConsole(MainPrompt);
if (string.IsNullOrWhiteSpace(consoleInput)) continue;
Execute(consoleInput);
}
}
public static string ReadFromConsole(string prompt)
{
Console.Write(prompt);
return Console.ReadLine();
}
static void Execute(string userChoice)
{
switch(userChoice.ToUpper())
{
case A:
{
ReadFromConsole(SubjectPrompt);
switch (userChoice.ToUpper())
{
case "A"/*ADD_SUBJECT*/:
{
AddSubject();
break;
}
case "B"/*EDIT_SUBJECT*/:
{
Console.WriteLine("edit subject");
break;
}
case "C"/*DELETE_SUBJECT*/:
{
Console.WriteLine("delete subject");
break;
}
}
break;
}
case B:/*{some code}*/
case C:/*{some code}*/
case D:/*{some code}*/
case E:/*{some code}*/
}
}
Случаи B, C и D имеют одинаковый формат.
Кто-нибудь может понять, почему для родительского случая A он всегда предлагает добавить тему независимо от того, какой случай выбран, а для остальных родительских случаев он просто отображает исходное приглашение?
Спасибозаранее