C#向List添加元素时触发Null Reference Exception问题求助
问题分析与解决思路
这个空引用错误的原因很明确:你在使用集合初始化器{ "Banana", "Neem", ... }给Values赋值时,Values这个List<string>对象还没有被实例化——它还是null,自然无法调用添加元素的方法。
下面给你几种可行的解决办法:
方法1:在类的构造函数中初始化列表
给FamilyValuesMap添加一个构造函数,在里面提前把Values实例化:
[DataContract(Name = "FamilyValuesMap", Namespace = "")] public class FamilyValuesMap { public FamilyValuesMap() { // 提前初始化列表,避免null Values = new List<string>(); } [DataMember(Name = "FamilyName", Order = 1)] public string FamilyName { get; set; } [DataMember(Name = "Values", Order = 2)] public List<string> Values { get; set; } }
这样你原来的添加代码就能正常运行了,因为构造函数已经帮你把Values变成了一个空的列表实例。
方法2:在对象初始化时直接实例化列表
不需要修改类的定义,只需要在创建FamilyValuesMap对象的时候,显式实例化Values:
var familyValuesMaps = new FamilyValuesMaps(); familyValuesMaps.Add(new FamilyValuesMap { FamilyName = "Trees", Values = new List<string> { "Banana", "Neem", "Pappaya", "Coconut" } });
这种方法更灵活,适合只在特定场景需要初始化列表的情况。
方法3:使用自动属性初始化器(C# 6及以上版本支持)
如果你的项目使用的是C# 6或更高版本,可以直接在属性定义的时候初始化:
[DataContract(Name = "FamilyValuesMap", Namespace = "")] public class FamilyValuesMap { [DataMember(Name = "FamilyName", Order = 1)] public string FamilyName { get; set; } [DataMember(Name = "Values", Order = 2)] public List<string> Values { get; set; } = new List<string>(); }
这种写法最简洁,属性会在对象创建时自动完成初始化,同样能避免空引用问题。
另外提个小建议:变量名尽量遵循C#的命名规范,比如把FamilyValuesMaps改成familyValuesMaps(小驼峰),这样代码可读性更好哦。
内容的提问来源于stack exchange,提问作者Jeya Suriya Muthumari
相关产品推荐
相关产品推荐

