【问题标题】:NullReferenceException on trying to use my first user-defined type尝试使用我的第一个用户定义类型时出现 NullReferenceException
【发布时间】:2013-12-31 19:51:25
【问题描述】:

我要做的是定义我自己的类型,其中包含 2 个ints 以在二维数组中使用。应用程序使用数组索引作为二维空间中要显示的对象的 x,y 坐标。因此,数据存储在array[13,5] 的对象将显示在 x=13,y=5,并且可以使用array[13,5].property1 检索该对象的属性,例如。我定义的类型非常简单:

chunkBlocks.cs:
public class chunkBlocks {
    public int blockType;
    public int isLoaded;
}

然后,我初始化数组:

chunkBlocks[,] _bData = new chunkBlocks[17, 17];

这一切都编译/运行没有错误。当我尝试为该类型的属性之一赋值时,会抛出 NRE。对于调试,我将代码编写为:

_bData[i, n].blockType = 5;

并且 NRE 专门在 .blockType 部分抛出。我尝试更改类型以使用 0 值对 ints 进行初始化,但无济于事:

public class chunkBlocks {
    public int blockType = 0;
    public int isLoaded = 0;
}

我在 Google 上四处搜索并搜索了 SO,但我无法找到任何东西。我确信这是一个相对简单的问题,但我没有足够的经验来确定它。

谢谢!

【问题讨论】:

    标签: c# arrays nullreferenceexception


    【解决方案1】:

    你需要初始化数组的每个实例:

    _bData[i, n] = new chunkBlocks();
    

    现在给它赋值:

    _bData[i, n].blockType = 5;
    

    你必须初始化每个实例,你只是在数组中声明了它们。

    【讨论】:

      【解决方案2】:

      我认为你应该这样做:

      for(int i = 0;i<17;i++)
      {
          for (int j = 0; j < 17; j++)
          {
               _bData[i, j] = new chunkBlocks ();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        相关资源
        最近更新 更多