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

使用嵌套类时触发NullReferenceException,寻求技术帮助

解决类成员引用导致的NullReferenceException问题

嘿,这个问题其实是刚接触引用类型的开发者常遇到的典型坑!你并没有做错核心逻辑,只是遗漏了初始化引用类型属性的关键步骤。

问题根源

在C#中,引用类型(比如你定义的MergeFields类)的属性默认初始值是null。当你创建Member实例时,merge_fields属性并没有自动生成MergeFields的实例——它只是一个指向“空”的引用。这时候直接访问person.merge_fields.CITY,就相当于尝试从一个空盒子里拿东西,自然会触发NullReferenceException。

另外还要提一句:你的代码里有个小拼写错误——merge_fileds应该是merge_fields(注意最后是e不是i),不过这不是触发异常的主要原因,但修正后才能正确访问属性。

三种可行的解决方案

1. 创建Member实例后手动初始化merge_fields

这是最直接的方式,在使用merge_fields前先给它分配一个MergeFields实例:

Member Person = new Member();
Person.merge_fields = new MergeFields(); // 先初始化引用属性
string cityTest = "New York";
Person.merge_fields.CITY = cityTest; // 现在可以正常赋值了

2. 在Member类的构造函数中自动初始化merge_fields

如果希望每个Member实例创建时都自带一个MergeFields实例,可以在Member的构造函数里完成初始化:

public class Member 
{
    public string email_Address { get; set; }
    public string status { get; set; }
    public MergeFields merge_fields { get; set; }

    // 构造函数:创建Member时自动初始化merge_fields
    public Member()
    {
        merge_fields = new MergeFields();
    }
}

这样之后,你原来的赋值代码就可以直接运行,不需要额外手动初始化了。

3. 使用C#自动属性初始化器(C# 6及以上版本支持)

这是更简洁的写法,直接在属性定义时完成初始化:

public class Member 
{
    public string email_Address { get; set; }
    public string status { get; set; }
    // 自动初始化merge_fields为新实例
    public MergeFields merge_fields { get; set; } = new MergeFields();
}

这种方式和构造函数初始化效果一致,但代码更紧凑。

总结

你的用法完全可行,只是漏掉了引用类型属性的初始化步骤。上面三种方案任选其一都能解决问题,根据你的实际场景选择最适合的方式就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:41:49