c# - for 循环中的每次迭代都会覆盖整个数组的值

标签 c# arrays windows for-loop windows-phone-8

我有一个 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/

相关文章:

c# - 获取 VS 2010 中执行查询的历史记录?

c# - 如何在 C#、.net 中异步重定向标准错误流而不是进程的标准输出流

c - C 中字符串数组和函数的问题

c# - 如何获取当前的 Windows 目录,例如C :\in C#

windows - RegSvr32 退出代码文档?

c++ - 如何在控制台窗口中找到光标的坐标?

c# - 跨账户访问 DynamoDb 表 C#

c# - TransactionScope 无意中锁定了部分数据库

java - 如何使用 json 从 mysql 检索图像?

python - 有效地将 2D numpy mask 在所有方向上扩展 n 个单元格