不能给数组赋值

本文关键字:赋值 数组 不能 | 更新日期: 2023-09-27 18:11:01

我有一个类型为Texture2D的tile数组,并希望将数组中的每个tile设置为不同的东西。

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

它指向的错误是关闭}

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

I have try:

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

但是编译器说"不能对'Microsoft.Xna.Framework.Graphics.Texture2D'类型的表达式应用[]索引"

不能给数组赋值

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

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

Texture2D[] m_tiles = new Texture2D[columns * rows + 1];
在c#和大多数。net语言中,

数组索引是基于0的。因此,当使用索引器时,您可能希望从0 ..N-1,而不是1…n。

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

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

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

m_tiles = new Texture2D[10];

像大多数其他类型一样,需要创建数组,更具体地说,它需要知道您希望它有多少个元素(在本例中,它有10个"槽")。

你需要初始化一个合适的数组尺寸

m_tiles[]不能初始化为接收(columns * rows)元素。

所以,在循环之前,你应该用这个大小初始化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]将不会被分配,并且会触发index out of bound异常。如果您确实不想从0开始,您可以使用(columns * rows +1)将数组的大小增加1。