在foreach循环中修改对象的值

Sam*_*Sam 2 c# foreach xna

我定义了一个叫做敌人的矩形列表,我试图通过列表中的矩形移动并递减它们的X值,但是我得到一个错误"无法修改'我',因为它是一个foreach迭代变量." 我想知道这有什么问题,如果有正确的方法去做.

        foreach (Rectangle i in enemies)
        {

            i.X --:

        }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 8

值类型按值复制; 这就是为什么他们被称为"价值类型".当你这样做,你是一个复制的矩形,然后变异副本.现在,恰好是foreach循环生成值的不可变副本并告诉您不能更改它,这很好,因为它只是捕获了您的错误.如果您将更改变为可变副本,则可能很长时间没有找到该错误.

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