C# 为什么调试时在代码中获取System.String[]?

C# 为什么调试时在代码中获取System.String[]?,c#,C#,我正在为初学者做c语言的最后一个项目,但我似乎无法让我的列表正常工作。它也会在被订单“填满”后自动关闭 class Burgare { private string[] hamburger = new string[24]; private int no_burger = 0; public void add_burger()//Ordering of burgers { Console.Clear(); //Clears console

我正在为初学者做c语言的最后一个项目,但我似乎无法让我的列表正常工作。它也会在被订单“填满”后自动关闭

class Burgare
{
    private string[] hamburger = new string[24];
    private int no_burger = 0;





    public void add_burger()//Ordering of burgers
    {
        Console.Clear(); //Clears console to make it look cleaner
        while (true)
        {
            int Burger_option = 0;
            do
            {
                Console.WriteLine("");// The options user can choose from
                Console.WriteLine("Please choose burgers from our menu:");
                Console.WriteLine("-------Burgers--------");
                Console.WriteLine("1 Original One     109");
                Console.WriteLine("2 Pig & Cow        109");
                Console.WriteLine("3 Spice & Nice     109");
                Console.WriteLine("4 Green One        109");
                Console.WriteLine("0 Go back to main menu");
                Console.WriteLine("----------------------");
                Console.WriteLine("");



                try //Making sure the user only picks what is on the menu
                {
                    Burger_option = int.Parse(Console.ReadLine());
                }

                catch
                {
                    Console.WriteLine("You can only choose what is on the menu!");


                }

                switch (Burger_option) //Depending on the number user presses on keyboard different burgers will be added to order
                {
                    case 1:
                        Console.WriteLine("You've added the Original One to your order");
                        Console.WriteLine("If you're done press 0 to go back to the main menu");
                        hamburger[no_burger] = "Original One";
                        break;

                    case 2:
                        Console.WriteLine("You've added the Pig & Cow to your order");
                        Console.WriteLine("If you're done press 0 to go back to the main menu");
                        hamburger[no_burger] = "Pig & Cow";
                        break;

                    case 3:
                        Console.WriteLine("You've added the Spice & Nice to your order");
                        Console.WriteLine("If you're done press 0 to go back to the main menu");
                        hamburger[no_burger] = "Spice & Nice";
                        break;

                    case 4:
                        Console.WriteLine("You've added the Green One to your order");
                        Console.WriteLine("If you're done press 0 to go back to the main menu");
                        hamburger[no_burger] = "Green One";
                        break;

                    case 0: //Sends user back to main menu
                        Run();
                        break;
                }
                no_burger++; //Adds burger

            } while (no_burger != 0);

            if (no_burger <= 25) //Maximum number of orders
            {
                Console.WriteLine("The restaurant can't take more than 24 orders of burgers at the time");
                Run(); //Sends user back to main menu when the order is over 24
            }
        }
    }



    public void print_order()
    {

        Console.WriteLine("-Your current order-");



    foreach (var burger in hamburger) //Showing a list of what is in the order
        {
         Console.WriteLine(hamburger);

         if (burger != null)

                Console.WriteLine(burger);            
         else
                Console.WriteLine("Empty space"); //Making empty space to show where you can add more burgers
        }

    }
输入24个顺序后,我得到了错误System.IndexOutOfRangeException:“索引超出了数组的界限。”我环顾了一下,但仍然不知道如何修复代码。我想让它在告诉用户订单已满后返回主菜单

对于我的第二个问题System.String[]问题,它在我输入“打印顺序”时出现。它表现为 System.String[] 空位 System.String[] 空位
等等如果可能的话,我想完全删除它或者至少用1,2,3…等替换它。

首先,请每个问题只发布一个问题;你在这里描述了很多问题,但实际上只问了一个问题。如果您有多个问题,请发布多个问题

为什么调试时在代码中获取System.String[]

默认情况下,C在打印类型时提供类型名称,并且打印字符串数组。要将字符串数组转换为字符串,请使用字符串类型的Join方法。注意不要将其与序列上的连接扩展方法混淆

它也会在被订单“填满”后自动关闭

当控制台程序的控件到达Main的末尾时,它终止该程序。如果您希望其他事情发生,请编写代码,指明您希望发生的事情

输入24个顺序后,我得到了错误System.IndexOutOfRangeException:“索引超出了数组的界限。”我环顾了一下,但仍然不知道如何修复代码。我想让它在告诉用户订单已满后返回主菜单

您已经为24件物品预留了空间,并且尝试访问第25件物品。那是一个致命的错误。不要那样做。您需要检测并预防这种情况

如果您想让它在告诉用户订单已满后返回主菜单,请编写代码来执行此操作。怎样因为主菜单显然是一个可以发生多次的事情,所以你需要把它放在一个循环中。您已经编写了两个循环;把更多的东西放在循环中

当我们查看您的代码时,还有一些好建议:

现在开始使用C语言的约定。您编写了Console.WriteLine,然后创建了一个方法print\u order。遵循框架设计者设定的模式,而不是你自己编造的东西。类型和方法应该是CasedLikeThis。 永远不要在try-catch中使用int.Parse。这就是int.TryParse的作用! 你的程序有一个bug;如果有人输入,比如说,7,会发生什么?处理那个案子!
你永远不会真正检查你在do…while循环中添加了多少项-你只会在循环完成后检查。这就是为什么当您尝试添加第25项时它会崩溃

在do…while循环中移动逻辑来处理这个问题,您将不再得到异常

另外,您的阵列只能容纳24个项目,但我假设您的目标是25个项目


另外,由于您是编程新手,您可能想看看@Eric Lppert的-这将为您节省大量时间。您还应该阅读有关诊断问题的内容。

删除Console.WriteLinehamburger;对于第一个问题,最好是自己调试并找出问题所在,在添加23项之后添加一个断点。对于第二个问题,您可能需要删除Console.WriteLinehamburger;从loopAdd-in中,您可以在一个Console.ReadLine的末尾添加一个main,这样程序就不会终止。OP将逻辑放入检查中,以查看它们是否已达到do…while循环之外的最大项数,因此,它不会阻止用户在达到最大数量后继续尝试添加内容,除非用户恰好在正确的时间输入了“0”。@EJoshuaS:这就是我所暗示的,当我说在循环中放入更多内容时,你需要检测这种情况。我想你可能就是这样指。。。只是更明确地说明问题所在,因为OP是编程的新手。