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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:47:23