2013-08-21 277 views
1

我想创建一个二维数组对象(基本上是一个XY坐标系),但我不知道如何。我有一个创建Tile对象的Map类。在Map类的构造函数中,我编写了代码来创建Tile对象的2D锯齿状数组。C#无法创建对象数组

我不知道为什么这不起作用,以前我创建了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); 

    } 
} 

回答

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(); 
    } 
} 
0

之前,你可以使用一个元素,你必须做出一个新的......这样的:

TileGrid[0][0] = new Tile(); 

然后你就可以使用它:

TileGrid[0][0].TileID = 5; 

错误消息是正确的,你试图引用一个空的瓷砖位置。