使用嵌套对象 C# 构建对象 - 如何将行项目添加到发票

Build up object with nested objects C# - how to add lineitems to invoice

我正在尝试构建一个发票列表,但每个发票都有一个订单项列表, 我可以请教如何添加嵌套对象的指导吗?

我正在努力弄清楚谁将 LineItems 添加到发票中,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace myNS
{

    class Invoice
    {
        public int id;
        public int value;
        List<LineItem> li = new List<LineItem>();
    }
    class LineItem
    {
        public int LineItemID;
        public int LineItemValue;
        public int LineItemQty;
    }

    class Class1
    {
        static void Main(string[] args)
        {
            var items = new[]
            {
            new Invoice{id=1, value =30}, //how to insert LineItems here
            new Invoice{id=2, value =10},
            new Invoice{id=3, value =20}
            };
        }

    }
}

试试这个...注意 li 需要是一个 public 列表

class Invoice
{
    public int id;
    public int value;
    public List<LineItem> li = new List<LineItem>();
}
class LineItem
{
    public int LineItemID;
    public int LineItemValue;
    public int LineItemQty;
}

class Class1
{
    static void Main(string[] args)
    {
        var items = new[]
        {
        new Invoice{id=1, value =30, li = new List<LineItem>{new LineItem{LineItemID = 1, LineItemValue =2,LineItemQty = 3}}}, //how to insert LineItems here
        };
    }

}

如前所述 - 您的列表需要 public。

public class Invoice
{
    public int id;
    public int value;
    public List<LineItem> li = new List<LineItem>(); //<-- here
}

这将允许您访问它。

要将项目添加到列表中 - 您有两个选择。

1) 初始化时创建一个新列表,并将项目放入其中。

static void Main(string[] args)
{
    var lineitem = new LineItem();
    var items = new[]
    {
    new Invoice{id=1, value =30, li = new List<LineItem>{lineitem}}, //<-- like this
    new Invoice{id=2, value =10},
    new Invoice{id=3, value =20}
    };
}

2) 将项目添加到现有列表 - 初始化后:

static void Main(string[] args)
{
    var lineitem = new LineItem();
    var items = new[]
    {
    new Invoice{id=1, value =30},
    new Invoice{id=2, value =10},
    new Invoice{id=3, value =20}
    };

    items[0].li.Add(lineItem);//<-- like this
}