【问题标题】:How to initialize objects inside two dimensional array?如何初始化二维数组中的对象?
【发布时间】:2019-03-13 11:19:21
【问题描述】:

我有一个二维数组

BoardTile tiles[,];

然后在Init(Point size) 中设置它的大小:

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

我该如何初始化所有这些元素,因为它不使用默认的BoardTile() 构造函数。它只是分配null

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

不工作。当我尝试打电话时

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

我收到NullReferenceException

【问题讨论】:

  • 对每个维度使用 for 循环。这在所有数组教程中都有显示。为枚举集合引入foreach
  • 另外这不是动态大小的数组,初始化后数组大小不会改变。

标签: c# multidimensional-array


【解决方案1】:

你可以试试嵌套循环

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

编辑:如果 嵌套循环 过于复杂且不可读,请尝试切换到 锯齿状数组,即数组数组 - BoardTile tiles[][]; - 来自2D 一个BoardTile tiles[,],例如

   // 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 

【讨论】:

  • 这是唯一的方法吗?我考虑过这个解决方案,但对我来说这看起来可以更容易完成。
  • @SkillGG:不像 jagged 数组(数组数组BoardTile[][]多维 数组(BoardTile[,])不是很方便。跨度>
  • 好的。感谢您的帮助。我想我被这个丑陋的双循环初始化困住了。
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 2017-07-23
  • 2011-12-08
  • 1970-01-01
  • 2014-02-18
  • 2012-11-29
相关资源
最近更新 更多