C#错误将Struct字符串保存到文件中

时间:2016-06-14 11:36:58

标签: c#

有人可以帮我解决这个问题吗? 所以,在第70和第75行,我在数组中添加了一个新值,但是我收到了这个错误:

  

未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。
    在Application.Main()< 0x41237d50 + 0x00729> in:0
  [ERROR]致命的未处理异常:System.IndexOutOfRangeException:索引超出了数组的范围。
    在Application.Main()< 0x41237d50 + 0x00729> in:0

代码:

http://pastebin.com/YtEv8Afk

谢谢!

1 个答案:

答案 0 :(得分:0)

您获得例外的地方的代码:

num_players = num_players + 1;
Array.Resize(ref players, num_players);
players[num_players].Name = s;

resize语句将数组的大小调整为索引范围为0到num_players-1的数组。您可以使用的最高索引是num_playes-1。

因此,如果您尝试访问播放器[num_players],则可能会出现异常。

调整阵列大小是一项非常昂贵的操作。如果您确定数组的大小永远不会改变,人们常常建议只使用数组。在所有其他情况下,使用List<玩家>。您永远不必调整它,只需添加元素,它们将被添加到列表的末尾。

顺便说一句,我在你的代码中看到了一些奇怪的东西:

for(int k = 0; k == num_players; k--)
{
     players[k] = players[k + 1];
}

所以你从k = 0开始;做你的东西并做k--,给你一个k == -1的值。我几乎不相信那是你打算做的。