c# - 在 foreach 循环中修改对象的值

标签 c# xna foreach

我定义了一个称为敌人的矩形列表,我试图在列表中的矩形中移动并递减它们的 X 值,但我收到错误消息“无法修改‘i’,因为它是一个 foreach 迭代变量”我想知道这有什么问题,是否有正确的方法。

        foreach (Rectangle i in enemies)
        {

            i.X --:

        }

最佳答案

值类型按值复制;这就是为什么它们被称为“值类型”的原因。执行此操作时,您正在制作矩形的副本,然后复制。现在,foreach 循环恰好生成了该值的不可变副本 并告诉您不能更改它,这很好,因为它刚好捕获了您的错误。如果您一直在对可变副本进行更改,您可能很长时间都不会发现错误。

您的 Enemy 类型可能应该是引用类型,而不是值类型。让敌人包含一个矩形,而不是一个矩形。然后,您可以改变对敌人的引用中的矩形。

关于c# - 在 foreach 循环中修改对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9471173/

相关文章:

c# - Matlab Coder - 从 .m 文件生成 EXE

c# - XNA - 一起使用 Draw 和 DrawString 时奇怪的帧率下降

c# - 调用 Game.Exit() 后 XNA 游戏未退出

xna - XNA 是否存在相机库?

asp.net-mvc - 如何将索引应用于 IEnumerable 表达式类型并在 razor View 中并排显示数据

c# - 是否可以根据条件设置临界区?

c# - 如何将配置更改保存回 App.Config

c# - Linq 查询最近 7 天的不同日期值,运行查询时抛出异常

php - 按字母顺序排列数组结果 PHP

Javascript 按索引比较 2 个数组,而不是按 2 个数组共有的值总数