我从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'在他们旁边,过了一会儿他们被踢出了房间。所以,我不确定这个问题是怎么回事。有人有什么想法吗?
答案 0 :(得分:2)
在foreach期间,您无法从集合中删除项目。
修改强>
当您移除'房间时会抛出异常。从您在foreach中迭代的集合中。内部计数器会出现问题。
如上所述,在foreach中使用Reverse可能会有效。