为什么我不能将对象添加到列表中?

时间:2014-06-13 18:08:37

标签: c# list methods console

(获取底部的所有c#文件)

我在班级“菜单”中列出了Pizza-objects列表。当我尝试将Pizza-class的对象添加到列表中时(我再次从菜单类中添加),我遇到了问题:

(顺便说一句,我试过翻译,但我很抱歉 - 其中一些是丹麦文作为作业的一部分 - 但上面的评论是翻译)

            //add to menu
    public void TilføjTilMenukort()
    {          
        //"add element to the menu?"
        Console.WriteLine("Tilføj element til menuen? j/n");
        svar = char.Parse(Console.ReadLine());
        if(svar == 'j')
        {   
            //enter number
            Console.WriteLine("Indtast nummer");
            int newNr = int.Parse(Console.ReadLine());

            //enter name
            Console.WriteLine("\nIndtast navn");
            string newNavn = Console.ReadLine();

            //enter ingredient
            Console.WriteLine("\nIndtast ingredienser adskilt med ','");
            string newIngrediens = Console.ReadLine();

            //enter price
            Console.WriteLine("\nIndtast pris"); 
            double newPris = double.Parse(Console.ReadLine());
            //list name is "pizza on menu"
            PizzaPaaMenu.Add(new Pizza(newNr, newNavn, newIngrediens, newPris));
        }
    }

就好像将对象添加到列表中一样,因为在此之后我调用了一个写入列表中每个元素的方法 - 它出现在列表中!:

    //show menu
    public void VisMenu()
    {
        Console.WriteLine("Menu:\n");

        foreach (Pizza p in PizzaPaaMenu)
        {
            Console.WriteLine("{0}. {1} - {2} - {3} kr.\n", p.Nr, p.PizzaNavn, p.Ingrediens, p.Pris);
        }
    }

但是当我尝试从另一个类(命令)中运行另一个方法之后 - 它会一直返回该行说没有找到披萨:

    Console.WriteLine("\nPizzaen med nr. " + bestilNummer + " blev ikke fundet!");

..在这段代码中进一步发现:

    //create order
    public void OpretBestilling()
    {
        do
        {
            //"which number from the menu do you want?"
            Console.WriteLine("\nHvilket nummer fra menuen ønsker du at bestille?");
            //orderNumber
            int bestilNummer = int.Parse(Console.ReadLine());
            //orderPizza
            Pizza bestiltPizza = null;

            Menukort menukort = new Menukort();

            //The pizzas is searched through for the pizza with number "bestilNummer"("orderNumber")),
            foreach (Pizza p in menukort.PizzaPaaMenu)
            {
                if (p.Nr == bestilNummer)
                {
                    //if it is found in the list "PizzaPaaMenu", "bestiltPizza" points to the pizza being added (pizza p)
                    bestiltPizza = p;
                    break;
                }
            }
            //if it is a "real" pizza (not null / p), it gets added to the list "BestillingsListe" ("order-list")
            if (bestiltPizza != null)
            {
                BestillingsListe.Add(bestiltPizza);
                //"the pizza is added to your order"
                Console.WriteLine("\n" + bestiltPizza.PizzaNavn + " er tilføjet til bestillingen");
                //"do you wish to order more?"
                Console.WriteLine("\nØnsker du at bestille mere? j/n");
                done = char.Parse(Console.ReadLine());
            }else{
                //"Pizza x was not found"
                Console.WriteLine("\nPizzaen med nr. " + bestilNummer + " blev ikke fundet!");
            }
        } while (done == 'j');
    }

我的Main方法中的重要代码如下所示:

    //should add a pizza-object to the list of pizzas in "menu"
                    menukort.TilføjTilMenukort();

                    //runs through the list of pizza-objects
                    menukort.VisMenu();

                    //"do you wish to order?"
                    Console.WriteLine("\nØnsker du at bestille? j/n");
                    charsvar = char.Parse(Console.ReadLine());
                    if (charsvar == 'j')
                    {   //creates an order by making sure, that the pizza exists in the list from "menu"
                        bestilling.OpretBestilling();
                        //shows what has been ordered
                        bestilling.VisBestilling();

...

谢谢!

Get all files

1 个答案:

答案 0 :(得分:1)

Bestilling类不知道您在主程序中使用的Menukort实例。它创建了自己的实例,这是一个单独的比萨列表,从那个你一直在使用的比萨饼。

您应该将您使用的实例发送到Menukort类,而不是在Bestilling类中创建Menukort menukort = new Menukort(); Bestilling bestilling = new Bestilling(menukort); 的新实例:

Bestilling

class Bestilling { private Menukort menukort; ... 类中为它声明一个变量:

public Bestilling(Menukort kort) {
  menukort = kort;
}

在构造函数中,您获得对实例的引用并输入变量:

{{1}}

使用您添加到类中的变量,删除创建新实例的行(342),其余代码将相同。


我们的英语观众的翻译:

  

Bestilling =食品订单
  Menukort =菜单表