![](/img/trans.png)
[英]Why am I getting the following error: “System.NullReferenceException: Object reference not set to an instance of an object.” when I run a Unit Test?
[英]I am getting a System.NullReferenceException : Object reference not set to an instance of an object when trying to add a value to an array at runtime
我有一段代码:
编辑:_penParams初始化为下面添加的行。
ProjectionParameters _penParams = new ProjectionParameters();
[Given(@"Rate Rule List $raterule")]
public void Rate_Rule_List(Int32 raterule)
{
_penParams.RateRuleIds.Initialize();
_penParams.RateRuleIds.Add(raterule);
}
它引用一个定义为的整数数组:
private Collection<Int32> rateRuleIds;
/// <summary>
/// A collection of rate rule Ids the member has selected. This is only relevant for an AgeServiceOptions Rates Mode.
/// </summary>
public Collection<Int32> RateRuleIds
{
get { return rateRuleIds; }
}
发生了两件事:
任何想法将不胜感激!
顺便说一句:我正在使用NBehave开发一种简单的语法,以允许非技术人员指定要测试的最终用户条件。
private Collection<Int32> rateRuleIds;
您需要initialize
rateRuleIds,因为它尚未被declared
。
Collection<Int32> rateRuleIds = new Collection<int>();
一个对象的声明告诉编译器该对象存在,这是规范并准备处理它。 另一方面, Initialization为对象分配内存。
何时实际初始化Array:
rateRuleIds = new Collection<Int32>();
编辑:
既然您已经声明您实际上是在初始化变量,那么我将不得不信任您。 但是,我不确定这行是什么:
_penParams.RateRuleIds.Initialize();
Initialize()
某种扩展方法吗? 因为它不是Collection类的一部分。
对您的集合的引用为null,这通常是由于未能初始化集合而导致的。 空引用异常表示您正在尝试访问不存在的实例上的成员。 (是否有理由不在声明它的位置内联初始化集合?)
根据其他评论,我怀疑您对初始化感到困惑。 您声明在ProjectionParameters()
初始化this.rateRuleIds
。 您确定在使用rateRuleIds
或RateRuleIds
做任何操作之前已调用ProjectionParameters()
吗? 如果是这样,您确定该集合随后不会再设置为null吗?
我建议,作为故障排除步骤,请在您提到的行上在ProjectionParameters()
中设置一个断点this.rateRuleIds = new Collection<int>();
,以及RateRuleIds.get
属性访问器中的一个。 那么我建议运行的代码,以确保ProjectionParameters
之前你曾经获得或使用实际执行rateRuleIds
。 如果执行了它,请继续单步执行,验证this.rateRuleIds
的值this.rateRuleIds
是您期望的值,直到遇到NullReferenceException
为止。
您是否曾经像这样初始化过您的收藏集:
rateRuleIds = new Collection<Int32>();
看起来像
private Collection<Int32> rateRuleIds;
没有初始化为任何地方的new Collection<Int32>()
...
编辑:
所以你说你已经初始化了收藏。 那么_penParams是否实际初始化了?
为什么不能调试代码并查看问题所在?
在初始化集合的代码上放置一个断点,并确保正在调用它。 在掉落的线上放置一个断点,然后检查变量以查看哪个为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.