创建一个对象列表,并通过另一个类在控制台中显示它们

本文关键字:控制台 显示 另一个 列表 一个对象 创建 | 更新日期: 2023-09-27 18:10:50

对于家庭作业,我需要创建一个List<T>,向其添加对象,并显示对象toString。以下是我的内容:

public class Order
{
    ...
      public List<OrderLine> orderLines;
      public Order(User user1)
      {
          ...
          orderLines = new List<OrderLine>();
      }
      public void AddOrderLine(OrderLine newOrderLine)
      {
          orderLines.Add(newOrderLine);
      }
}
public class OrderLine
{
   public OrderLine(Product p1, int q1)
   {
      ...
   }
   public override string ToString() //Required by teacher
   {
      string myOrderLine;
      myOrderLine = String.Format("[Product name: {0}; Price: {1}; Quantity: {2}]", 
         product.name, product.price, quantity);
      return myOrderLine;
   }
}

当添加overderlines . add (newOrderLine)时,newOrderLine是在另一个具有工作toString的类中创建的对象。如何显示Program.CS中的所有newOrderLines ?

创建一个对象列表,并通过另一个类在控制台中显示它们

我假设你的主方法看起来像这样:

{    
   User user = new User();    
   Order order = new Order(user);   
   OrderLine orderLine1 = new OrderLine();   
   order.AddOrderLine(orderLine1); 
}

如果我理解你说的正确的话,OrderLine已经覆盖了ToString(),所以当你调用ToString()时,它返回一些"人类有意义的"东西。在这种情况下,您唯一需要做的就是沿着

行做一些事情。
foreach (var orderLine in order.orderLines)
{
    Console.WriteLine(orderLine.ToString());
}

请注意,不公开公开字段(如orderLines)被认为是一种良好的实践。最好将其设置为私有,并创建一个公共属性,如:

public IEnumerable<OrderLine> OrderLines
{
   get { return this.orderLines; }
}

假设您有OrderLine类的工作.ToString()。如果您只想将它们显示到控制台,您可以执行以下简单的操作:

foreach(OrderLine orderline in orderLines)
   System.Console.WriteLine(orderline.ToString());
编辑:

有两种简单的方法可以做到这一点,要么是Mathias概述的方式,要么是把我的代码放在你的Order类中。例如,像这样添加一个新方法:
public void PrintOrders()
{
    foreach(OrderLine orderline in this.orderLines)
       System.Console.WriteLine(orderline.ToString());  
}

你可以这样使用:

User user = new User();    
Order order = new Order(user);   
OrderLine orderLine = new OrderLine();
order.AddOrderLine(orderLine);
order.PrintOrders();

请注意,将类打印到控制台通常不被认为是好的做法。我只是想告诉你解决这个问题的另一种方法。

如果在Program.cs中有这样的东西来填充Order对象

var order = new Order();
order.AddOrderLine(...);
//this is how you can display each item ToString in the collection
foreach(var o in order.orderLines)
{
   Console.WriteLine(o.ToString());
}

检查是否有任何拼写错误或语法错误,因为我只在这里输入了inline

这是你需要的吗?

public static void Main(string[] args)
{
    Order order = new Order();
    OrderLine line1 = new OrderLine(...);
    OrderLine line2 = new OrderLine(...);
    OrderLine line3 = new OrderLine(...);
    order.AddOrderLine(line1);
    order.AddOrderLine(line2);
    order.AddOrderLine(line3);
    foreach (OrderLine line in order.orderLines)
    {
        Console.WriteLine(line.ToString());
    }
}