C#嵌套类赋值报错:Object reference not set to an instance of an object
问题原因与解决方案
问题本质
你遇到的Object reference not set to an instance of an object错误,根本原因不是Order类无法识别嵌套的Address类,而是Address类型的address属性在Order实例创建后仍为null。C#中引用类型的默认值是null,直接访问null对象的成员自然会触发空引用异常。
修复方案
方案1:手动实例化Address对象
在给address的属性赋值前,先创建Address的实例:
using ConsoleApp1.DataModels; namespace WalmartOrderProcessing { class Program { static void Main(string[] args) { Order myOrder = new Order(); myOrder.name = "John Doe"; myOrder.description = "Contractor"; // 先实例化嵌套的Address类 myOrder.address = new Order.Address(); myOrder.address.city = "Chicago"; myOrder.address.state = "IL"; myOrder.address.zip = "12345"; } } }
方案2:在Order构造函数中自动初始化Address
修改Order类,在构造函数里直接初始化address属性,这样每次创建Order实例时,address都会自动被实例化:
namespace ConsoleApp1.DataModels { public class Order { public string name { get; set; } public string description { get; set; } public Address address { get; set; } // 添加构造函数初始化address public Order() { address = new Address(); } public class Address { public string city { get; set; } public string state { get; set; } public string zip { get; set; } } } }
这样业务代码无需改动,直接赋值address的属性即可。
方案3:使用C# 6.0+的自动属性初始化器
如果使用较新的C#版本,可以直接在属性声明时初始化address:
public Address address { get; set; } = new Address();
修改后的Order类:
namespace ConsoleApp1.DataModels { public class Order { public string name { get; set; } public string description { get; set; } // 自动初始化address属性 public Address address { get; set; } = new Address(); public class Address { public string city { get; set; } public string state { get; set; } public string zip { get; set; } } } }
内容的提问来源于stack exchange,提问作者Jake_ss
相关产品推荐
相关产品推荐

