在foreach循环中抛出IndexOutOfRangeException

时间:2013-07-30 16:43:17

标签: c# photon

我使用Photon服务器运行多人游戏,每100多场比赛一次,服务器停止响应输入 - 查看日志文件我得到以下异常:

  

2013-07-30 12:31:24,918 [11] ERROR Lite.Room [(null)] -   System.IndexOutOfRangeException:索引超出了范围   阵列。 at STSLib.Engine.handleInput(Hashtable input,Int32 playerId)   在C:\ Program Files(x86)\ Photon \ Photon中   src-server \ STSServer \ STSLib \ Engine.cs:第130行

查看我的代码,我的引擎类的第130行是foreach循环:

foreach (Player p in players)
{
    Queue playerQueue = new Queue();
    returnTable.Add(p.playerId, playerQueue);       
}

玩家是我所代表的(你猜对了!)游戏的玩家,玩家是一系列玩家。 returntable,是我发送给客户端的其他数据的哈希表队列的哈希表,我只是用空队列实例化每个键。

foreach循环被调用,并且在此场景中游戏被破坏之前多次运行 - 也就是说这个异常开始在游戏过程中被抛出。

任何人都可以解释foreach循环如何抛出索引超出范围的异常吗?

1 个答案:

答案 0 :(得分:4)

它不应该......除非你使用并发,并且在循环运行时,其他地方更改了player变量。

Afaik无法在循环中更改玩家(我认为你会在该位置出现运行时错误,但不会在foreach循环中出现错误)。