C# 控制台应用程序中的简单菜单

C# 控制台应用程序中的简单菜单,c#,C#,我试图让我的菜单重复,所以在选择并执行选项1后,它将返回菜单并要求选择另一个选项 class Program { static void Main(string[] args) { FootballTeams MyCode = new FootballTeams(); MyCode.ListInit(); MyCode.DisplayMenu(); MyCode.AddTeams(); Conso

我试图让我的菜单重复,所以在选择并执行选项1后,它将返回菜单并要求选择另一个选项

class Program
{
    static void Main(string[] args)
    {

        FootballTeams MyCode = new FootballTeams();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.AddTeams();
        Console.ReadLine();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.DisplayTeams();
        Console.ReadLine();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.Delete();
        Console.ReadLine();

        MyCode.ListInit();
        MyCode.DisplayMenu();
        MyCode.TeamSearch();
        Console.ReadLine();
    }
}
以下是取出内容的方法:

class FootballTeams
{


    public FootballTeams(){ }

    List<string> teams;
    public void ListInit()


    public void DisplayMenu()
   {   
    Console.WriteLine("Football Manager");
    Console.WriteLine();
    Console.WriteLine("1. Add a Football team");
    Console.WriteLine("2. List the Football teams");
    Console.WriteLine("3. Search for a Football team");
    Console.WriteLine("4. Delete a team");
    Console.ReadLine();
    }



    public void AddTeams()
    {
      Console.WriteLine("Enter a team to be added: ");
      string userinput = Console.ReadLine();
      if (teams.Count < 10)
      {
       if (userinput != "Colchester")
        {
          teams.Add(userinput);
          foreach (var item in teams)
          Console.Write(item.ToString() + " ");
         }
        else
          Console.Write("NOT ALLOWED");
         }
       else
         Console.Write("MAXIMUM LIMIT REACHED");
      }


    public void DisplayTeams()
    {
     foreach(var item in teams)
     Console.Write(item.ToString() + " ");
    }

    public void TeamSearch()
    {
     Console.WriteLine("Please enter the team you wish to search for: ");
     string userinput = Console.ReadLine();
     if (teams.Contains(userinput))
     Console.WriteLine("Success, team " + userinput);
    }

    public void Delete()
    {
      Console.WriteLine("Enter a team you wish to delete: ");
      string userinput = Console.ReadLine();
      teams.Remove(userinput);
      foreach (var item in teams)
      Console.Write(item.ToString() + " ");
    }
class足球队
{
公共足球队(){}
列出小组名单;
public void ListInit()
公共void显示菜单()
{   
控制台。WriteLine(“足球经理”);
Console.WriteLine();
Console.WriteLine(“1.添加足球队”);
Console.WriteLine(“2.列出足球队”);
Console.WriteLine(“3.搜索足球队”);
Console.WriteLine(“4.删除团队”);
Console.ReadLine();
}
公共团队()
{
Console.WriteLine(“输入要添加的团队:”);
字符串userinput=Console.ReadLine();
如果(队数<10)
{
如果(用户输入!=“Colchester”)
{
添加(用户输入);
foreach(团队中的var项目)
Console.Write(item.ToString()+);
}
其他的
控制台。写入(“不允许”);
}
其他的
控制台写入(“达到最大限制”);
}
公共服务队()
{
foreach(团队中的var项目)
Console.Write(item.ToString()+);
}
public void TeamSearch()
{
Console.WriteLine(“请输入您希望搜索的团队:”;
字符串userinput=Console.ReadLine();
if(teams.Contains(userinput))
Console.WriteLine(“成功,团队”+用户输入);
}
公共作废删除()
{
Console.WriteLine(“输入要删除的团队:”);
字符串userinput=Console.ReadLine();
删除(userinput);
foreach(团队中的var项目)
Console.Write(item.ToString()+);
}
我知道我的措辞很糟糕,所以我希望有人能理解我的问题:p

将主要功能替换为:

static void Main(string[] args) {
    FootballTeams MyCode = new FootballTeams();

    MyCode.ListInit();

    ConsoleKeyInfo cki;

    do {
        MyCode.DisplayMenu();
        cki = Console.ReadKey(false); // show the key as you read it
        switch (cki.KeyChar.ToString()) {
            case "1":
                MyCode.AddTeams();
                break;
            case "2":
                MyCode.DisplayTeams();
                break;
            // etc..
        }
    } while (cki.Key != ConsoleKey.Escape);

}

基本上,您需要循环,直到他们按Escape键。每次读取该键时,您都可以执行所选的操作。

您可以使用do while循环 对DispalyMenu()方法稍作修改,并返回如下结果

static public int DisplayMenu()
{   
  Console.WriteLine("Football Manager");
  Console.WriteLine();
  Console.WriteLine("1. Add a Football team");
  Console.WriteLine("2. List the Football teams");
  Console.WriteLine("3. Search for a Football team");
  Console.WriteLine("4. Delete a team");
  Console.WriteLine("5. Exit");
  var result = Console.ReadLine();
  return Convert.ToInt32(result);
}
并将其写入Main()方法

因此,用户暂时不输入“5”,代码将在循环中执行。
希望能有所帮助。

现在有一个nuget软件包

范例

添加nuget包后,菜单可以通过以下方式实现,这是一个非常基本的选项

static void Main(string[] args)
{
    var menu = new EasyConsole.Menu()
      .Add("foo", () => Console.WriteLine("foo selected"))
      .Add("bar", () => Console.WriteLine("bar selected"));
    menu.Display();
}
在操作中,您可以放置任何方法以在选中时运行

这将输出如下内容

static public int DisplayMenu()
{   
  Console.WriteLine("Football Manager");
  Console.WriteLine();
  Console.WriteLine("1. Add a Football team");
  Console.WriteLine("2. List the Football teams");
  Console.WriteLine("3. Search for a Football team");
  Console.WriteLine("4. Delete a team");
  Console.WriteLine("5. Exit");
  var result = Console.ReadLine();
  return Convert.ToInt32(result);
}
  • 酒吧

  • 选择一个选项:

    当我实际运行它时,所有方法都不起作用,所以假设我按1添加一个团队,而不是初始化该方法,它只打印菜单?您显示的方法实际上没有任何作用。因此,当您选择一个选项时,不执行任何操作,然后执行中断,然后重新打印菜单。布尔值在ReadKey中是截取键而不是显示键。要显示它,布尔值应为false@tinstaafl我把方法的内容拿出来缩短帖子,我会把它们加回去in@user2852418:请参阅更新。案例陈述应查找
    D1
    D2
    ,而不是
    1
    2
    因此,您需要从
    .DisplayMenu()
    方法中删除
    ReadLine
    语句。我在本地进行了测试,效果很好。很好的例子。一个小注释:int.TryParse(result,out item)可能更好,因为如果输入非整数,它不会引发异常。