记住在列表内添加列表的语法

时间:2019-02-15 11:09:23

标签: c# xamarin

我之前已经做过,但是忘记了语法。我正在制作一个JSON文件,该文件看起来列出了下面的类,但是在提交按钮上我想添加它们,但是我想不起来列表中是否有列表的语法!我的课程是:

public class LineItemCheck
    {
        public string Id { get; set; }
        public string Check { get; set; }
        public bool Yes { get; set; }
        public bool No { get; set; }
    }

    public class LineItem
    {
        public string Category { get; set; }
        public List<LineItemCheck> LineItemChecks { get; set; }
    }

    public class RootObject
    {
        public object SerialNumber { get; set; }
        public object UnitNumber { get; set; }
        public object Refrigerant { get; set; }
        public object ModelNumber { get; set; }
        public object BeltSize { get; set; }
        public object FreezingUnitComments { get; set; }
        public object VisualInspectionComments { get; set; }
        public List<LineItem> LineItems { get; set; }
    }


    private void SubmitButton_Clicked(object sender, EventArgs e)
    {
        var checklist = new RootObject();
        var checklistLineItem = new List<LineItem>();
        var checklistLineItemChecks = new List<LineItemCheck>();


        checklist.SerialNumber = SerialNumber.Text.ToString();
        checklist.UnitNumber = UnitNumber.Text.ToString();
        checklist.Refrigerant = Refrigerant.Text.ToString();
        checklist.ModelNumber = ModelNumber.Text.ToString();
        checklist.BeltSize = BeltSize.Text.ToString();

        checklistLineItem.Add(new LineItem() {
            Category = "Ziegra Machines Only",
            LineItemChecks = new LineItemCheck(LineItemCheck.
            ),



        });

如您所见,底部是错误的,这是我要解决的问题

更新:我记得自己很抱歉发布语法,但是我一直在寻找答案:

var checklist = new RootObject();
        var checklistLineItem = new List<LineItem>();
        var checklistLineItemChecks = new List<LineItemCheck>();


        checklist.SerialNumber = SerialNumber.Text.ToString();
        checklist.UnitNumber = UnitNumber.Text.ToString();
        checklist.Refrigerant = Refrigerant.Text.ToString();
        checklist.ModelNumber = ModelNumber.Text.ToString();
        checklist.BeltSize = BeltSize.Text.ToString();

        checklistLineItem.Add(new LineItem() {
            Category = "Ziegra Machines Only",
            LineItemChecks = new List<LineItemCheck>()
            {
                new LineItemCheck()
                {
                    Check = "",
                },
                new LineItemCheck()
                {
                    Check = ""
                }
            }
        });

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则以下语法应该正确:

        checklistLineItem.Add(new LineItem()
        {
            Category = "Ziegra Machines Only",
            LineItemChecks = new List<LineItemCheck>()
            {
                new LineItemCheck(),
                new LineItemCheck(), ...
            },
        });

答案 1 :(得分:0)

如果可以的话,我会像这样修改您的模型。

public class LineItem
{
    public string Category { get; set; }
    public List<LineItemCheck> LineItemChecks { get; private set; }

    public LineItem()
    {
         LineItemChecks = new List<LineItemCheck>();
    }
}

public class RootObject
{
    public object SerialNumber { get; set; }
    public object UnitNumber { get; set; }
    public object Refrigerant { get; set; }
    public object ModelNumber { get; set; }
    public object BeltSize { get; set; }
    public object FreezingUnitComments { get; set; }
    public object VisualInspectionComments { get; set; }
    public List<LineItem> LineItems { get; private set; }


    public RootObject()
    {
         LineItems = new List<LineItem>();
    }

}

也就是说,在构造函数中初始化所有集合。暴露集合并且可以为null的属性是丑陋的,更重要的是,是无法预料的。我从不从未期望过一个集合,如果它是通过某个属性公开的,则该收藏集将是null,我希望它只是空的,并且我可以添加一些东西。我不负责您的对象公开的集合,正确地自行初始化是您对象的职责。

这是.NET领域的共识,您很难找到实例化对象时null被库公开的集合示例。

还要注意,我将设置器设为私有,因为其他任何对象都不能完全替换由其他对象公开的集合。

然后将项目添加到集合中完全是一个问题:

var root = new RootObject();
var lineItem = new LineItem();
lineItem.LineItemChecks.Add(new LineItemCheck() { /* init properties here */ });
root.LineItems.Add(lineItem);