C#中初始化List属性以解决添加元素时的空引用异常
解决List属性空引用错误的方法
你碰到的这个「未将对象引用设置到对象的实例」错误,核心原因很简单:root.items这个List<Item>属性在创建RootObject实例时,默认是null状态,你直接调用Add方法去操作一个null的列表,肯定会报错。
下面给你几种靠谱的解决方式,按推荐程度排序:
1. 用自动属性初始化器(最简洁,C# 6+支持)
直接在RootObject类的属性定义时就初始化列表,这样每次创建RootObject实例,items都会自动变成一个空的List,不用再手动处理:
public class RootObject { [JsonProperty("dropOff")] public DropOff dropOff { get; set; } [JsonProperty("providerId")] public int providerId { get; set; } [JsonProperty("Reference ")] public string Reference { get; set; } [JsonProperty("returnMethodId")] public int returnMethodId { get; set; } [JsonProperty("items")] // 这里直接初始化列表 public List<Item> items { get; set; } = new List<Item>(); }
之后你的调用代码完全不用改,直接添加元素就行:
Booking.RootObject root = new Booking.RootObject(); root.providerId = 111; root.Reference = "ytrhtew"; root.returnMethodId = 1; root.items.Add(new Item { variantId = 1, quantity = 1, returnReason = 2 });
2. 在类的构造函数里初始化
如果你的项目用的是C# 6之前的版本,或者更习惯用构造函数初始化成员,可以给RootObject加一个无参构造函数,在里面初始化items:
public class RootObject { [JsonProperty("dropOff")] public DropOff dropOff { get; set; } [JsonProperty("providerId")] public int providerId { get; set; } [JsonProperty("Reference ")] public string Reference { get; set; } [JsonProperty("returnMethodId")] public int returnMethodId { get; set; } [JsonProperty("items")] public List<Item> items { get; set; } // 无参构造函数,初始化items public RootObject() { items = new List<Item>(); } }
这种方式和上面的效果一致,创建实例后items就已经是可用的空列表了。
3. 手动初始化(临时解决)
如果只是临时测试,不想修改RootObject类,那就在创建root实例后,先手动给items赋值一个新的List:
Booking.RootObject root = new Booking.RootObject(); root.items = new List<Item>(); // 先初始化列表 root.providerId = 111; root.Reference = "ytrhtew"; root.returnMethodId = 1; root.items.Add(new Item { variantId = 1, quantity = 1, returnReason = 2 });
不过这种方式不推荐长期使用,因为每次创建实例都要记得手动初始化,很容易遗漏,再次触发同样的错误。
总的来说,前两种方法一劳永逸,能从根源上避免这类空引用问题,优先选择它们就好。
内容的提问来源于stack exchange,提问作者Mayamiko
相关产品推荐
相关产品推荐

