首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当试图在运行时向数组添加值时,我将得到一个System.NullReferenceException :对象引用,而不是将其设置为对象的实例。

当试图在运行时向数组添加值时,我将得到一个System.NullReferenceException :对象引用,而不是将其设置为对象的实例。
EN

Stack Overflow用户
提问于 2010-02-23 14:09:12
回答 5查看 6.1K关注 0票数 1

我有一段代码:

编辑:_penParams被初始化为下面添加的行。

代码语言:javascript
复制
    ProjectionParameters _penParams = new ProjectionParameters();

    [Given(@"Rate Rule List $raterule")]
    public void Rate_Rule_List(Int32 raterule)
    {

        _penParams.RateRuleIds.Initialize();

        _penParams.RateRuleIds.Add(raterule);

    }

它引用一个整数数组,定义为:

代码语言:javascript
复制
        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 : Object引用未设置为对象实例“的错误。

任何想法都将不胜感激!

顺便说一句:我正在使用NBehave开发一个简单的语法,允许非技术人员指定要测试的最终用户条件。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-23 14:41:56

对集合的引用为空,通常是由于未能初始化集合。空引用异常意味着您正在尝试访问不存在的实例上的成员。(是否有理由不按您声明的位置初始化集合?)

基于其他评论,我怀疑您对初始化感到困惑。您说明您在this.rateRuleIds中初始化了ProjectionParameters()。您确定ProjectionParameters()在您使用rateRuleIdsRateRuleIds之前就已经被调用了吗?如果是的话,您确定集合稍后不会被设置为null吗?

作为故障排除步骤,我建议在您提到的行ProjectionParameters()中设置一个断点,this.rateRuleIds = new Collection<int>();,以及RateRuleIds.get属性访问器上的一个断点。然后,我建议运行代码,以确保在获得或使用ProjectionParameters之前实际执行rateRuleIds。如果它被执行,则继续执行,验证this.rateRuleIds的值是否与您期望的一样,直到您遇到NullReferenceException为止。

票数 1
EN

Stack Overflow用户

发布于 2010-02-23 14:13:17

代码语言:javascript
复制
private Collection<Int32> rateRuleIds;

您需要initialize rateRuleIds,因为它还只是declared

代码语言:javascript
复制
Collection<Int32> rateRuleIds = new Collection<int>();

对象的声明告诉编译器这个对象是存在的,这是规范并准备好处理它。另一方面,Initialization,为对象分配内存。

票数 4
EN

Stack Overflow用户

发布于 2010-02-23 14:11:52

您何时实际初始化您的Array:

代码语言:javascript
复制
rateRuleIds = new Collection<Int32>();

编辑:

既然您已经声明您实际上正在初始化变量,那么我将不得不信任您。不过,我不太清楚这句话是甚麽:

代码语言:javascript
复制
_penParams.RateRuleIds.Initialize();

Initialize()是某种扩展方法吗?因为它不是集合类的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2318698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档