3

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

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

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

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

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

在这种情况下,foreach 循环被调用,并在游戏被破坏之前多次运行——也就是说,这个异常在游戏过程中开始被抛出。

谁能解释一下 foreach 循环如何抛出索引越界异常?

4

1 回答 1

5

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

Afaik 不可能在循环内更改播放器(我认为您会在该位置收到运行时错误,但不会在 foreach 循环上)。

于 2013-07-30T16:45:35.757 回答