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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:17:45