1

オブジェクトの 2D 配列 (基本的には XY 座標系) を作成しようとしていますが、方法がわかりません。Tile オブジェクトを作成する Map クラスがあります。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);

    }
}
4

2 に答える 2

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();
    }
}
于 2013-08-21T13:11:05.610 に答える
0

要素を使用する前に、新しい要素を作成する必要があります...次のように:

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

次に、それを使用できます。

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

エラー メッセージは正確に当てはまります。null のタイルの場所を参照しようとしていました。

于 2013-08-21T13:13:43.600 に答える