使用嵌套类时触发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
相关产品推荐
相关产品推荐

