system.invalidoperationexception:集合被修改;枚举操作可能无法执行。需要想法?

时间:2014-12-12 00:29:27

标签: c#

我从C#模拟器中收到此错误,

Error en thread Room cycle task for room 1: 
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.Collections.Generic.HashSet`1.Enumerator.MoveNext()
at Mercury.HabboHotel.Rooms.RoomManager.UnloadRoom(Room Room) in                        xampp\Emulator\HabboHotel\Rooms\RoomManager.cs:line 629
at Mercury.HabboHotel.Rooms.Room.ProcessRoom() in c:\xampp\Emulator\HabboHotel\Rooms\Room.cs:line 807

快速解释,此模拟器适用于Flash游戏。它所引用的代码也是如此。 RoomManager.cs第629行;

lock (Room.RoomChat)
            {
                foreach (Chatlog current2 in Room.RoomChat)
                {
                    current2.Save(Room.RoomId);
                }
            }
            Room.Destroy();

它是foreach系列。 Room.cs第807行,

if (this.IdleTime >= 60/* && usersQueueToEnter.Count == 0*/)
                    {
                        MercuryEnvironment.GetGame().GetRoomManager().UnloadRoom(this);
                        mIsIdle = false;
                        return;
                    }

确切地说,它是MercuryEnvironment.GetGame()行。基本上,我展示的第一个空白意味着保存一个房间聊天记录,然后“摧毁”'这个房间只是意味着没有人在里面。第二部分是指空闲计时器。如果你的角色闲置太久,他们会更新一点Zzz'在他们旁边,过了一会儿他们被踢出了房间。所以,我不确定这个问题是怎么回事。有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在foreach期间,您无法从集合中删除项目。

修改

当您移除'房间时会抛出异常。从您在foreach中迭代的集合中。内部计数器会出现问题。

如上所述,在foreach中使用Reverse可能会有效。