修改foreach循环中对象的值

本文关键字:对象 foreach 循环 修改 | 更新日期: 2023-09-27 18:26:07

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

        foreach (Rectangle i in enemies)
        {
            i.X --:
        }

修改foreach循环中对象的值

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

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