繁体   English   中英

我正在获取System.NullReferenceException:尝试在运行时向数组添加值时,对象引用未设置为对象的实例

[英]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; }
    }

发生了两件事:

  1. 当我尝试编译时,.Add方法对我不可用,它在以前的实例中可用,但是由于我从直接使用DLL切换到调用Web服务进行测试而消失了。
  2. 如果尝试访问数组的任何部分及其任何属性,则会收到“ System.NullReferenceException:对象引用未设置为对象实例”的错误。

任何想法将不胜感激!

顺便说一句:我正在使用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 您确定在使用rateRuleIdsRateRuleIds做任何操作之前已调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM