为什么在列表<十进制>中出现空引用异常

本文关键字:引用 异常 列表 十进制 为什么 | 更新日期: 2023-09-27 18:34:44

>我有一个问题,我在 C# 中创建了一个对象,如下所示:

public class logis
        {
            public string codigo { get; set; }
            public List<decimal> Necesidades { get; set; }
            decimal SumaNecesidades{get;set;}
        }

然后我做这样的事情:

logisva logi = new logis();
logi.codigo = oDataReader.GetValue(0).ToString();
logi.Necesidades.Add(0);

但是当我执行我的代码时,我收到一个空引用异常错误。 Object reference not set to an instance of an object.最后一行logi.Necesidades.Add(0);

知道为什么我会收到此错误吗?

为什么在列表<十进制>中出现空引用异常

在 C# 中,属性不会自动初始化/创建List<ofType>对象。您需要显式创建列表:

public class logis
{
    public string codigo { get; set; }
    public List<decimal> Necesidades { get; set; }
    decimal SumaNecesidades{get;set;}
    public logis() 
    { 
        this.Necesidades = new List<decimal>(); 
    }
}

另一种选择是在getter resp. setter中创建列表(所以说你自己的懒惰初始化,缺点 - 引入更多代码,优势不需要覆盖每个构造器(:

public class logis
{
    public string codigo { get; set; }
    decimal SumaNecesidades{get;set;}
    private List<decimal> necesidades = null;
    private void initNecesidades() 
    {
        if (this.necesidades == null) 
        { 
            this.necesidades = new List<decimal>(); 
        }
    }
    public List<decimal> Necesidades 
    { 
        get
        {
            this.initNecesidades();
            return this.necesidades;
        }
        set
        {
            this.initNecesidades();
            this.necesidades = value;
        }
    }
}

另一种选择是使用新的 C# 6.0 功能(如果它是使用/已经使用最新 .NET Framework 版本的选项(,正如 @Jcl 的评论中已经建议的那样:

public List<decimal> Necesidades { get; set; } = new List<decimal>()