【发布时间】:2013-07-30 16:43:17
【问题描述】:
我正在使用 Photon 服务器运行多人游戏,在每 100 多场游戏中,服务器停止响应输入 - 查看日志文件,我收到以下异常:
2013-07-30 12:31:24,918 [11] 错误 Lite.Room [(null)] - System.IndexOutOfRangeException:索引超出范围 大批。在 STSLib.Engine.handleInput(哈希表输入,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);
}
其中 player 是我为代表(你猜对了!)游戏玩家而创建的一个类,而 player 是一个 Player 数组。 returntable,是我发送给客户端的其他数据的哈希表队列的哈希表,我只是用一个空队列实例化每个键。
foreach 循环被调用,并在游戏在这种情况下被破坏之前运行多次——也就是说,这个异常在游戏过程中开始被抛出。
谁能解释一下 foreach 循环如何抛出索引越界异常?
【问题讨论】:
-
你能粘贴整个foreach循环吗?
-
players可能是一个 IEnumerable,直到这个 foreach 循环才被评估。你应该创造球员吗? -
以防万一更改玩家列表出现问题,您至少可以尝试this
-
使用
array永远不会发生这种情况,即使是并发也是如此。更准确地了解数据、类型和声明。还要指定是否使用任何并发。 -
玩家已经被实例化——这个异常在游戏过程中开始被抛出——在这个循环成功运行了几次之后