You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在类中声明另一个类的List?订单类集合初始化问题求助

问题分析与解决方案

嘿,我一眼就发现你代码里的问题啦!你在Order类的构造函数里创建了一个局部变量testLine,但这个变量和类的公共属性testLine完全是两回事——类的属性根本没被初始化,所以默认是null,自然没法调用Add方法,访问的时候也显示为null。

具体问题点

你原来的构造函数里这段代码:

public Order() {
    var testLine = new List<OrderLineItems>();
}

这里的var testLine是构造函数内部的局部变量,生命周期只在构造函数执行期间,类的public List<OrderLineItems> testLine { get; set; }属性完全没被赋值,所以还是默认的null。

修正方案

有两种简单的方式可以解决这个问题:

方案1:在构造函数中初始化类的属性

把构造函数里的局部变量改成直接给类的testLine属性赋值:

class Order {
    public Order() {
        // 去掉var,直接给类的属性赋值
        testLine = new List<OrderLineItems>();
    }
    public List<OrderLineItems> testLine { get; set; }
}

方案2:使用属性初始化器(推荐,更简洁)

在C# 6及以上版本,可以直接在属性声明时初始化,连构造函数里的代码都省了:

class Order {
    // 声明属性时直接初始化列表
    public List<OrderLineItems> testLine { get; set; } = new List<OrderLineItems>();
    
    public Order() {
        // 这里不需要额外的初始化代码了
    }
}

修正后的完整测试代码

把上面的修正方案应用后,你的Main方法就能正常运行了:

namespace ObjectsCSharpe.Library
{
    class Order {
        public List<OrderLineItems> testLine { get; set; } = new List<OrderLineItems>();
    }

    class OrderLineItems {
        public OrderLineItems() {
            this.orderID = 0;
            this.lineNumber = 0;
            this.product = new Product();
            this.quantity = 0;
            this.test = "OLI";
            this.lineTotal = 0.00;
        }
        public int orderID { get; set; }
        public int lineNumber { get; set; }
        public Product product { get; set; }
        public int quantity { get; set; }
        public string test { get; set; }
        public double lineTotal { get; set; }
    }

    // 补充Product类的定义(你原来的代码里没贴,这里补上避免编译报错)
    class Product { }

    class Program {
        static void Main(string[] args) {
            Order orderSheet = new Order();
            OrderLineItems temp456 = new OrderLineItems();
            orderSheet.testLine.Add(temp456);
            string abc = orderSheet.testLine[0].test;
            Console.WriteLine(abc); // 会输出"OLI"
        }
    }
}

这样修改后,Order实例的testLine属性会被正确初始化为空列表,你就能正常调用Add方法添加订单行,也能访问到列表里的元素啦!

内容的提问来源于stack exchange,提问作者Celtic89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:37:40