不能给数组赋值
本文关键字:赋值 数组 不能 | 更新日期: 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。