无法为数组赋值

时间:2011-10-12 20:33:04

标签: c# null

我有一个Texture2D类型的图块数组,并希望将数组中的每个图块设置为不同的颜色。

for (int i = 1; i <= columns * rows; i++)
        {
            m_tiles[i] = new Texture2D(m_graphicsDevice, tilewidth, tileheight);
        }

它指出错误是结束}

当我试图将它设置为不为null效果时,我不明白它是如何为空。如果我永远不能将变量设置为任何东西,那么它们将永远为空。

我试过了:

Texture2D[] m_tiles = new Texture2D(m_graphicsDevice, tilewidth, tileheight)[500];

但编译器说“无法使用[]和”Microsoft.Xna.Framework.Graphics.Texture2D“类型的表达式进行索引”

3 个答案:

答案 0 :(得分:2)

首先需要初始化一个数组实例,以便为其元素赋值:

for - 循环之前加上以下语句:

Texture2D[] m_tiles = new Texture2D[columns * rows + 1];

数组索引在C#中基于0,并且支持大多数.NET语言。因此,在使用索引器时,您可能希望从0 ... n-1循环,而不是1 .. n。

但老实说,我很少在.NET中使用数组。如果您没有特定的理由使用数组,我建议使用List<T>

List<Texture2D> m_tiles = new List<Texture2D>();
for(;;)
{
  m_tiles.Add(new Texture2D(foo, bar));
}

答案 1 :(得分:1)

您需要首先实例化数组,例如:

m_tiles = new Texture2D[10];

与大多数其他类型一样,需要创建数组,更具体地说,它需要知道您希望它拥有多少个元素(在这种情况下,它有10个“插槽”)。

答案 2 :(得分:0)

您需要使用适当的维度初始化数组。

m_tiles []可能未初始化为接收(列*行)元素。

因此,在循环之前,应该使用此大小初始化m_titles数组。

Texture2D[] m_tiles = new Texture2D[columns * rows];

因此,如果您有1列和1行,它将为您提供1个插槽(m_tiles[0])。如果您有2列和2行,则将有4个插槽(m_tiles[0],m_tiles[1],m_tiles[2],m_tiles[3]);

你应该以i = 0开始循环,否则,将不会分配[0]并且将触发索引超出范围的异常。如果你真的不想从0开始,你可以使用(columns * rows +1)将数组大小增加1。