2013-08-21 2 views
1

개체의 2D 배열 (기본적으로 XY 좌표계)을 만들려고하는데 어떻게해야할지 모르겠습니다. Tile 객체를 생성하는 Map 클래스가 있습니다. Map 클래스의 생성자에서는 2D 지그재그 배열의 Tile 객체를 만드는 코드를 작성했습니다.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; 

오류 메시지가 정확히 사실, 당신은 널 타일의 위치를 ​​참조하고있었습니다.

관련 문제