2015-04-02 116 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重新編寫它。