我有一个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迭代,但这不起作用。
答案 0 :(得分:1)
在迭代时修改集合。这会导致未定义的行为。
您可以使用foreach
的常量列表修复此问题,如下所示:
foreach (RoomItem OldItem in
Room.GetRoomItemHandler().GetFurniObjects(fX, 26).ToList())
{
...
}
但我认为你应该再考虑一下你的设计。
答案 1 :(得分:0)
使用for循环迭代它时,不应该更改集合,使用while或do-while重写。