C# 正在尝试创建开关盒菜单

C# 正在尝试创建开关盒菜单,c#,switch-statement,C#,Switch Statement,因此,我正在为我的程序设计一个开关盒菜单,但我有多个问题(我可能遗漏了一些真正明显的问题) 因此,首先,我尝试实现一个while循环,以便在执行任何case方法后返回菜单。然而,当尝试实现while循环时,出于某种原因,它似乎无法识别我的bool变量 其次,我不太确定如何让用户在完成他们想要做的事情后返回开始菜单。在他们选择的情况下,这可能有一个真正简单的解决方案,但我就是找不到 [守则] private string[] säten = new string[24]; priv

因此,我正在为我的程序设计一个开关盒菜单,但我有多个问题(我可能遗漏了一些真正明显的问题)

因此,首先,我尝试实现一个while循环,以便在执行任何case方法后返回菜单。然而,当尝试实现while循环时,出于某种原因,它似乎无法识别我的bool变量

其次,我不太确定如何让用户在完成他们想要做的事情后返回开始菜单。在他们选择的情况下,这可能有一个真正简单的解决方案,但我就是找不到

[守则]

    private string[] säten = new string[24];
    private int Antal_passagerare = 0;
    public void Run()
    {
        bool continue = true;
        while(continue)
      {
        string menu = (Console.ReadLine());
        int tal = Convert.ToInt32(menu);
        switch(tal)
        {
            case 1:
                Add_passagerare;
                break;
            case 2:

                break;
            case 3:

                break;
        }
      }
    }

[/code]

您的问题是您的局部变量名与控制循环流(例如for、foreach、while等)的C#关键字(或语句)冲突。另一个控制流关键字是
break

必须重命名局部变量。但是由于流控制关键字,您可以删除局部变量(见下文)。如果用户输入了非数值,还可以使用
Int32.TryParse
避免程序崩溃。在这种情况下,您可以看到声明和工作:


然而,当尝试实现while循环时,出于某种原因,它似乎无法识别我的bool变量。
-你是什么意思?你的循环永远不会结束。
其次,我不太确定如何让用户返回开始菜单
-我想你指的是嵌套菜单,通常这是通过状态机模式完成的。。。您可能想要搜索它,尽管现在可能有点过头了。这甚至可以编译吗?我认为不允许使用c#关键字
continue
作为局部变量的名称。我可能认为使用while循环是完全错误的,但我希望用户能够在使用其中一个案例后返回菜单并再次使用它。这可能与我如何让用户在使用某个case方法后返回菜单有关,但如前所述,这是我需要了解的另一件事。是的,“状态机模式”对于学习编程来说听起来有点过分了1我在这篇文章中找到了continue while循环方法,可能是我用错了,也可能是它在这种情况下不起作用,我不知道。为了让后面的其他人更了解您的评论“您必须重命名局部变量”:如果有足够的理由让变量命名为与关键字相同的名称,在C#中,您可以在它前面加上@符号。Per OP的原始语法:
bool@continue=true但是+1以获得更好的流,从而首先避免变量。带有
中断的无限循环一开始可能感觉不正确,但有时是解决问题的正确方法。
// Start an infinite loop. Use the break statement to leave it.
while (true)
{
  string userInput = Console.ReadLine();

  // Quit if user pressed 'q' or 'Q'
  if (userInput.Equals("Q", StringComparison.OrdinalIgnoreCase)
  {
    // Leave the infinite loop
    break;
  }

  // Check if input is valid e.g. numeric. 
  // If not show message and ask for new input
  if (!(int.TryParse(userInput, out int numericInput))
  {
    Console.WriteLine("Only numbers allowed. Press 'q' to exit.");

    // Skip remaining loop and continue from the beginning (ask for input)
    continue;
  }

  switch (numericInput)
  {
    case 1:
      break;
    case 2:
      Add_passagerare();
      break;
    case 3:

      break;
  }
}