c#列表实例为空
我的问题是,我在一个类“菜单”中有一个列表,其中包含类“Pizza”的对象。我想以第三类“顺序”访问此列表。我是在控制台里做的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
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 ofpublic 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);
}
}