SkillGG
SkillGG

Reputation: 686

How to initialize objects inside two dimensional array?

I got a two dimensional Array

BoardTile tiles[,];

and then in Init(Point size) I set its size:

tiles = new BoardTile[size.X, size.Y];

And how do I initialize all those elements because it does not use default BoardTile() constructor. It just assigns null.

foreach(BoardTile t in tiles) t = new BoardTile()

Does not work. And when I try to call

foreach(BoardTile t in tiles) t.anything()

I get NullReferenceException.

Upvotes: 3

Views: 97

Answers (1)

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186823

You can try nested loops:

  for (int i = 0; i < titles.GetLength(0); ++i)
    for (int j = 0; j < titles.GetLength(1); ++j)
      titles[i, j] = new BoardTile();

Edit: if nested loops are too complex and unreadable, try switching to jagged arrays i.e. array of array - BoardTile tiles[][]; - from 2D one BoardTile tiles[,], e.g.

   // created and initialized jagged array
   BoardTile tiles[][] = Enumerable
     .Range(size.Y)                      // size.Y lines
     .Select(y => Enumerable             // each line is
        .Range(size.X)                   //   size.X items
        .Select(x => new BoardTile())    //   each of them is BoardTile()
        .ToArray())                      //   materialized as array
     .ToArray();                         // all arrays are array of array 

Upvotes: 5

Related Questions