能否在类中声明另一个类的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
相关产品推荐
相关产品推荐

