我有一个for循环,它遍历一个对象数组来设置对象绘图的值。下面是代码

for (int i = 0; i < screenBottom.Length; i++)
        {
            int newPostion = i * screenBottom[i].sourceRect.Width;
            //go through sourceRect as we're using drawSimple mode
            screenBottom[i].sourceRect.X = newPostion;
            screenBottom[i].Draw(spriteBatch);
        }

但是,每次设置sourcerect.x的新值时,数组中所有对象的sourcerect.x值都会被覆盖。在for循环结束时,所有sourcerect.x的值都等于只应为最后一个值的值。通过一些测试,我发现这只是一个循环。如果在循环之外更改值,则不会发生这种情况。请帮助!

最佳答案

我怀疑数组多次包含相同的对象,即意外地:

SomeType[] screenBottom = new SomeType[n];
for(int i = 0 ; i < screenBottom.Length ; i++)
    screenBottom[i] = theSameInstance;

您可以用ReferenceEquals(screenBottom[0], screenBottom[1])简单地检查它-如果它返回true,这就是问题所在。
注意,也可能是所有数组项都不同,但它们都与同一个sourceRect实例对话;您可以使用ReferenceEquals(screenBottom[0].sourceRect, screenBottom[1].sourceRect)检查

关于c# - for循环中的每次迭代都会覆盖整个数组的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22532820/

10-10 11:53