2015-04-02 85 views
-2

我有一个for循环,并且在出现一次后不断断开,但我不确定它为什么这样做。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迭代,但没有奏效。

+3

你在哪里写控制台? – 2015-04-02 18:57:46

+0

对不起,Logging.WriteLine正在写入控制台。 Console.WriteLine仍然显示相同的结果。 – user3818791 2015-04-02 18:58:22

+0

为什么downvote ..? – abatishchev 2015-04-02 18:59:17

回答

1

您在遍历它时修改集合。这导致未定义的行为。

可以与使用不断列表中foreach像这样解决这个问题:

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

但我认为你应该比较想通过您的设计一次。

+0

我试图锁定它,但它没有工作,我会如何解决这个问题? – user3818791 2015-04-02 19:00:40

+0

我会使用'ToArray()',而你不会添加任何东西到列表中。 – abatishchev 2015-04-02 19:02:22

+0

啊,现在我记得了。枚举错误。对不起,我的脑袋里滑了出来。谢谢! – user3818791 2015-04-02 19:03:16

0

您不应该在使用for循环遍历它时改变集合,使用while或do-while重新编写它。