c#列表实例为空

c#列表实例为空,c#,list,console-application,C#,List,Console Application,我的问题是,我在一个类“菜单”中有一个列表,其中包含类“Pizza”的对象。我想以第三类“顺序”访问此列表。我是在控制台里做的 class Menu { public List<Pizza> pizzaOnMenu = new List<Pizza>(); public void CreateElementToMenu() { pizzaOnMenu.Add(new Pizza(1, "Magarita", "Tomato, c

我的问题是,我在一个类“菜单”中有一个列表,其中包含类“Pizza”的对象。我想以第三类“顺序”访问此列表。我是在控制台里做的

class Menu
{
    public List<Pizza> pizzaOnMenu = new List<Pizza>();

    public void CreateElementToMenu()
    { 
        pizzaOnMenu.Add(new Pizza(1, "Magarita", "Tomato, cheese", 49));
        pizzaOnMenu.Add(new Pizza(2, "Hawaii", "Tomato, cheese, ham, pineapple", 55));
        pizzaOnMenu.Add(new Pizza(3, "Cappriciossa", "Tomato, cheese, ham, mushroom", 55));
        pizzaOnMenu.Add(new Pizza(4, "Special", "Tomato, cheese, beef", 60));
    }
}
然后我尝试按“顺序”访问列表,检查“菜单”列表中是否有比萨饼:

类顺序
{
私有列表orderList=新列表();
公共秩序
{
Console.WriteLine(“\n您想从菜单中订购哪个号码?”);
int orderNo=int.Parse(Console.ReadLine());
菜单=新菜单();
Pizza wantedPizza=null;
foreach(菜单中的比萨饼p.pizzaOnMenu)
{
如果(p.Nr==orderNo)
{
wantedPizza=p;
打破
}
}
if(wantedPizza!=null)
{
订单列表。添加(想要的比萨饼);
Console.WriteLine(“\n”+wantedPizza.PizzaName+”已添加到您的订单中”);
}    
其他的
{
Console.WriteLine(\n找不到编号为“+orderNo+”的比萨饼!”);
}
}
但是,当方法CreateOrder()从main运行时,例如从菜单中选择no.2,它会写“…未找到”而不是“…已添加到您的订单”-列表(来自“订单”)似乎是空的。但我可以打印从菜单:S创建的列表(如果有意义的话?)


提前感谢。

查看
menukort.pizzaOnMenu
内容上的
foreach
循环:我没有看到缩进指示预期的右大括号(
}
)(紧跟在if的右大括号之后)

因此,针对每个可能的比萨饼检查
if(wantedPizza!=null)


如果这只是创建问题时的剪切粘贴错误:在检查复制的代码是否为真实副本后编辑问题,然后明确更正。

如果Menukort和Menu是相同的类,您可能希望将调用初始化移到Menu类的构造函数:

class Menu
{
    public Menu()
    {
        CreateElementToMenu();
    }

    public List<Pizza> pizzaOnMenu = new List<Pizza>();

    public void CreateElementToMenu()
    { 
        pizzaOnMenu.Add(new Pizza(1, "Magarita", "Tomato, cheese", 49));
        pizzaOnMenu.Add(new Pizza(2, "Hawaii", "Tomato, cheese, ham, pineapple", 55));
        pizzaOnMenu.Add(new Pizza(3, "Cappriciossa", "Tomato, cheese, ham, mushroom", 55));
        pizzaOnMenu.Add(new Pizza(4, "Special", "Tomato, cheese, beef", 60));
    }
}
类菜单
{
公共菜单()
{
CreateElementToMenu();
}
public List pizzaomnus=新列表();
public void CreateElementToMenu()
{ 
添加(新比萨(1,“马加里塔”,“番茄,奶酪”,49));
添加(新比萨饼(2,“夏威夷”,“番茄,奶酪,火腿,菠萝”,55);
比萨菜单添加(新比萨(3,“卡普里西奥萨”,“番茄,奶酪,火腿,蘑菇”,55));
添加(新比萨(4,“特色”,“番茄,奶酪,牛肉”,60));
}
}

您的订单类使用
Menukort
对象而不是
菜单
我不理解的原因

在菜单类中有
public void CreateElementToMenu()

也许你应该在你的
课程中使用这段代码

Menu menu = new Menu();
menu.CreateElementToMenu();

使用
public static class
intsead of
public class

这只是另一种方法,使其更加坚固-请参见:

公共类OrderDataEntry
{
公共静态无效TakeOrder()
{
控制台。写(“\n您想从菜单中订购哪个号码?”);
int orderNo=int.Parse(Console.ReadLine());
Menu menukort=新菜单();
Pizza wantedPizza=menukort.pizzaomnus.FirstOrDefault(p=>p.OrderNumber.Equals(orderNo));
if(wantedPizza!=null)
{
Console.WriteLine(“\n”+wantedPizza.PizzaName+”已添加到您的订单中”);
订单o=新订单(想要的比萨饼);
}
其他的
{
Console.WriteLine(\n找不到编号为“+orderNo+”的比萨饼!”);
}
}
}
公共阶级秩序
{
私有列表订单列表;
公共秩序(比萨饼和比萨饼)
{
orderList=新列表();
AddToOrder(想要的比萨饼);
}
公共无效添加订单(披萨想要的披萨)
{
订单列表。添加(想要的比萨饼);
}
}

Menukort和Menukort是不同的类?因为这可能是问题所在,但我不确定ii是否只是一个打字错误。Menukort是什么,它是如何填充的,以及为什么您希望在新的Menukort中填充pizzaOnMenu?抱歉。我翻译它时有一些打字错误。Menukort和Menukort现在应该是同一个类:)
class Order
{

    private List<Pizza> orderList = new List<Pizza>();

    public void CreateOrder()
    {
        Console.WriteLine("\nWhich number from the menu do you wish to order?");
        int orderNo = int.Parse(Console.ReadLine());

        Menu menu = new Menu();
        Pizza wantedPizza = null;

        foreach (Pizza p in menu.pizzaOnMenu)
        {
            if (p.Nr == orderNo)
            {
                wantedPizza = p;
                break;
            }
         }

        if (wantedPizza != null)
        {
            orderList.Add(wantedPizza);
            Console.WriteLine("\n" + wantedPizza.PizzaName + " is added to your order");
        }    
        else
        {
            Console.WriteLine("\nThe pizza with no. " + orderNo + " was not found!");
        }
    }
class Menu
{
    public Menu()
    {
        CreateElementToMenu();
    }

    public List<Pizza> pizzaOnMenu = new List<Pizza>();

    public void CreateElementToMenu()
    { 
        pizzaOnMenu.Add(new Pizza(1, "Magarita", "Tomato, cheese", 49));
        pizzaOnMenu.Add(new Pizza(2, "Hawaii", "Tomato, cheese, ham, pineapple", 55));
        pizzaOnMenu.Add(new Pizza(3, "Cappriciossa", "Tomato, cheese, ham, mushroom", 55));
        pizzaOnMenu.Add(new Pizza(4, "Special", "Tomato, cheese, beef", 60));
    }
}
Menu menu = new Menu();
menu.CreateElementToMenu();
public class OrderDataEntry
{
    public static void TakeOrder()
    {
        Console.Write("\nWhich number from the menu do you wish to order?");
        int orderNo = int.Parse(Console.ReadLine());

        Menu menukort = new Menu();
        Pizza wantedPizza = menukort.pizzaOnMenu.FirstOrDefault<Pizza>(p => p.OrderNumber.Equals(orderNo));

        if (wantedPizza != null)
        {
            Console.WriteLine("\n" + wantedPizza.PizzaName + " is added to your order");
            Order o = new Order(wantedPizza);
        }
        else
        {
            Console.WriteLine("\nThe pizza with no. " + orderNo + " was not found!");
        }
    }
}

public class Order
{
    private List<Pizza> orderList; 

    public Order(Pizza wantedPizza)
    {
        orderList = new List<Pizza>();
        AddToOrder(wantedPizza);
    }

    public void AddToOrder(Pizza wantedPizza)
    {
        orderList.Add(wantedPizza);
    }
}