我有一段代码:
编辑:_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开发一个简单的语法,允许非技术人员指定要测试的最终用户条件。
发布于 2010-02-23 14:41:56
对集合的引用为空,通常是由于未能初始化集合。空引用异常意味着您正在尝试访问不存在的实例上的成员。(是否有理由不按您声明的位置初始化集合?)
基于其他评论,我怀疑您对初始化感到困惑。您说明您在this.rateRuleIds中初始化了ProjectionParameters()。您确定ProjectionParameters()在您使用rateRuleIds或RateRuleIds之前就已经被调用了吗?如果是的话,您确定集合稍后不会被设置为null吗?
作为故障排除步骤,我建议在您提到的行ProjectionParameters()中设置一个断点,this.rateRuleIds = new Collection<int>();,以及RateRuleIds.get属性访问器上的一个断点。然后,我建议运行代码,以确保在获得或使用ProjectionParameters之前实际执行rateRuleIds。如果它被执行,则继续执行,验证this.rateRuleIds的值是否与您期望的一样,直到您遇到NullReferenceException为止。
发布于 2010-02-23 14:13:17
private Collection<Int32> rateRuleIds;您需要initialize rateRuleIds,因为它还只是declared。
Collection<Int32> rateRuleIds = new Collection<int>();对象的声明告诉编译器这个对象是存在的,这是规范并准备好处理它。另一方面,Initialization,为对象分配内存。
发布于 2010-02-23 14:11:52
您何时实际初始化您的Array:
rateRuleIds = new Collection<Int32>();编辑:
既然您已经声明您实际上正在初始化变量,那么我将不得不信任您。不过,我不太清楚这句话是甚麽:
_penParams.RateRuleIds.Initialize();Initialize()是某种扩展方法吗?因为它不是集合类的一部分。
https://stackoverflow.com/questions/2318698
复制相似问题