嵌套开关语句不访问内部开关用例c#

嵌套开关语句不访问内部开关用例c#,c#,nested,switch-statement,C#,Nested,Switch Statement,我在程序中使用嵌套的switch语句。出于某种原因,内部switch语句似乎不起作用 预期行为:启动程序后,向用户提供5个选项A:科目,B:学生,C:入学,D:成绩_记录E:退出。在这些选项中,A、B、C和D包含更多的开关语句。让我们以案例A:SUBJECTS为例。一旦选择了案例A,用户将看到另外3个选项A:添加主题,B:编辑主题,C:删除主题。然后,用户选择其中一个选项,然后执行一些代码。例如,假设用户选择一个主题,他将完成向主题池添加主题的过程 实际行为:启动程序后,会显示初始提示A:科目,

我在程序中使用嵌套的switch语句。出于某种原因,内部switch语句似乎不起作用

预期行为:启动程序后,向用户提供5个选项<代码>A:科目,B:学生,C:入学,D:成绩_记录E:退出。在这些选项中,A、B、C和D包含更多的开关语句。让我们以案例
A:SUBJECTS
为例。一旦选择了案例A,用户将看到另外3个选项<代码>A:添加主题,B:编辑主题,C:删除主题。然后,用户选择其中一个选项,然后执行一些代码。例如,假设用户选择一个主题,他将完成向主题池添加主题的过程

实际行为:启动程序后,会显示初始提示
A:科目,B:学生,C:报名,D:成绩_记录E:退出
,提示用户选择案例。用户选择案例后,将显示与所选选项相关的第二个提示。例如,如果用户在初始提示下选择了A,则显示的第二个提示是
A:添加主题,B:编辑主题,C:删除主题
。太好了,这就是我想要的。但问题是。当用户现在选择一个选项时,无论选择了什么选项,程序都会像选择了
ADD_SUBJECT
案例一样运行,并检查该选项的代码。这是针对父案例的
A:SUBJECTS
。至于其余的家长案例,会显示相关的子案例提示,但子案例的任何输入/选择都会导致初始提示
A:科目,B:学生,C:入学,D:成绩(u记录E:退出
),在显示时,它根本不会访问任何内部案例

请参考以下代码:

   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,不管选择了什么案例,它总是提示添加主题,而对于其他父案例,它只显示初始提示


提前感谢方法
ReadFromConsole
返回
字符串
,但您没有将其分配给
userChoice
,后者在输入方法时保持其值

case "A":
{
    userChoice = ReadFromConsole("Subject");

    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;
}

方法
ReadFromConsole
返回一个
字符串
,但您没有将其分配给
userChoice
,后者在输入方法时保持其值

case "A":
{
    userChoice = ReadFromConsole("Subject");

    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;
}

变量userChoice在第二个switch语句中仍然等于“A”,只需删除其值或创建一个新变量并将该新值传递给第二个开关:

...
var newInput = ReadFromConsole(SubjectPrompt);
switch (newInput.ToUpper())
{
  ...
}

变量userChoice在第二个switch语句中仍然等于“A”,只需删除其值或创建一个新变量并将该新值传递给第二个开关:

...
var newInput = ReadFromConsole(SubjectPrompt);
switch (newInput.ToUpper())
{
  ...
}

它将使用
案例A:
编译。什么是
A
这里您必须使用
userChoice=ReadFromConsole(“主题”)
案例A中:
。假设您的
案例A
只是打字错误,您可以对两个开关都使用
userChoice.ToUpper()
,这意味着总是
“A”
,end.1。什么
ReadFromConsole(SubjectPrompt)是什么?可能卡住了吗?2-如果用户选择的是“A”,那么“B”、“C”就没有意义了。。。在第二个开关中。@sujith karivelil代码编译,父案例A是
主题
,父案例A的子案例A是
添加主题
。但是,即使我选择了B(父案例A的子案例),即
EDIT\u SUBJECT
,它也会执行
ADD\u SUBJECT
的代码。它会使用
案例A:
进行编译吗。什么是
A
这里您必须使用
userChoice=ReadFromConsole(“主题”)
案例A中:
。假设您的
案例A
只是打字错误,您可以对两个开关都使用
userChoice.ToUpper()
,这意味着总是
“A”
,end.1。什么
ReadFromConsole(SubjectPrompt)是什么?可能卡住了吗?2-如果用户选择的是“A”,那么“B”、“C”就没有意义了。。。在第二个开关中。@sujith karivelil代码编译,父案例A是
主题
,父案例A的子案例A是
添加主题
。但即使我选择了B(父案例A的子案例),即
EDIT\u SUBJECT
,它也会执行
ADD\u SUBJECT
的代码。