对于一个之后的循环中断

时间:2015-04-02 18:55:24

标签: c# for-loop foreach

我有一个for循环,它在经历了一次后不断破坏但是我不确定为什么会这样做。

for (int fX = 1; fX < 17; fX++)
{
    foreach (RoomItem OldItem in Room.GetRoomItemHandler().GetFurniObjects(fX, 26))
    {
        Logging.WriteLine(OldItem.BaseItem.ToString());

        Room.GetRoomItemHandler().RemoveRoomItem(OldItem, false);
    }
}

注意: Logging.WriteLine与Console.WriteLine相同,它只是我的日志记录系统。

控制台的结果:

1

但是控制台应该输出(1,2,3等等) 有任何想法吗?我甚至尝试锁定foreach迭代,但这不起作用。

2 个答案:

答案 0 :(得分:1)

在迭代时修改集合。这会导致未定义的行为。

可以使用foreach常量列表修复此问题,如下所示:

foreach (RoomItem OldItem in 
    Room.GetRoomItemHandler().GetFurniObjects(fX, 26).ToList())
{
     ...
}

但我认为你应该再考虑一下你的设计。

答案 1 :(得分:0)

使用for循环迭代它时,不应该更改集合,使用while或do-while重写。