为什么 List<decimal> 中出现空引用异常
why null reference exception in List<decimal>
我有问题,我在 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# the properties中不自动initialize/createList<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 中创建列表。 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 功能(如果它是 use/already 使用最新 .NET Framework 版本的选项),正如@Jcl 在评论中所建议的那样:
public List<decimal> Necesidades { get; set; } = new List<decimal>()
我有问题,我在 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# the properties中不自动initialize/createList<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 中创建列表。 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 功能(如果它是 use/already 使用最新 .NET Framework 版本的选项),正如@Jcl 在评论中所建议的那样:
public List<decimal> Necesidades { get; set; } = new List<decimal>()