我正在尝试创建一个2D对象数组(基本上是一个XY坐标系),但我不确定如何。我有一个Map类创建Tile对象。在Map类的构造函数中,我编写了代码来创建Tile对象的2D锯齿状数组。
我不确定为什么这不起作用,之前我已经创建了2D锯齿状的整数数组,并且工作正常。
导致错误的原因是什么?我应该如何尝试创建对象数组?
这是我得到的错误:
Unhandled Exception: System.NullReferenceException: Object reference not set to
an instance of an object.
at ObjectArray.Map..ctor(Int32 NumberOfRows, Int32 NumberOfColumns) in C:\Use
rs\Lloyd\documents\visual studio 2010\Projects\ObjectArray\ObjectArray\Map.cs:li
ne 27
at ObjectArray.Program.Main(String[] args) in C:\Users\Lloyd\documents\visual
studio 2010\Projects\ObjectArray\ObjectArray\Program.cs:line 18
我的Tile.cs
class Tile
{
public int TileID { get; set; }
}
我的Map.cs:
class Map
{
private Tile[][] TileGrid;
public int Columns { get; private set; }
public int Rows { get; private set; }
public Map(int NumberOfRows, int NumberOfColumns)
{
Rows = NumberOfRows;
Columns = NumberOfColumns;
TileGrid = new Tile[NumberOfRows][];
for (int x = 0; x < TileGrid.Length; x++)
{
TileGrid[x] = new Tile[NumberOfColumns];
}
//Test for the right value.
TileGrid[0][0].TileID = 5;
Console.WriteLine(TileGrid[0][0].TileID);
}
}
答案 0 :(得分:5)
这一行
TileGrid[x] = new Tile[NumberOfColumns];
创建一个给定长度的null
引用数组。因此,您需要迭代它并使用对象初始化每个引用:
TileGrid = new Tile[NumberOfRows][];
for (int x = 0; x < TileGrid.Length; x++)
{
TileGrid[x] = new Tile[NumberOfColumns];
for (int y = 0; y < TileGrid[x].Length; y++)
{
TileGrid[x][y] = new Tile();
}
}
答案 1 :(得分:0)
在使用元素之前,你必须创建一个新元素......就像这样:
TileGrid[0][0] = new Tile();
然后你可以使用它:
TileGrid[0][0].TileID = 5;
错误消息完全正确,您试图引用null Tile位置。