列表<>;不会';t似乎能容纳500多个项目

本文关键字:能容纳 项目 gt lt 不会 列表 | 更新日期: 2023-09-27 18:28:50

我遇到了一个ArgumentOutOfRangeException。它所属的代码如下:

public static void readPuzzle()
{
    List<int> conversion = new List<int>(factor * factor * factor * factor);
    int count = 0;
    using (StreamReader codeString = new StreamReader(path))
    {
        String line = codeString.ReadToEnd();
        String[] split = line.Split(',');
        foreach (String a in split)
        {
            conversion.Add(Convert.ToInt32(a));
        }
        for (int panelX = 0; panelX < factor; panelX++)
        {
            for (int panelY = 0; panelY < factor; panelY++)
            {
                values[panelX, panelY] = new int[factor, factor];
                for (int squareX = 0; squareX < factor; squareX++)
                {
                    for (int squareY = 0; squareY < factor; squareY++)
                    {
                        values[panelX, panelY][squareX, squareY] = conversion[count];
                        count++;
                    }
                }
            }
        }
    }
}

指示的行是:

values[panelX, panelY][squareX, squareY] = conversion[count];

我相信这是参考了List<>转换的索引。当计数为500并且索引为[499]时,代码停止运行。我现在已经手动将列表的大小设置为625(因子=5),这应该正好是列表中项目的数量。不过,这似乎没有什么区别。我读过其他人的问题,他们提到了超过一百万个项目的列表,所以我不明白为什么我会有这个问题。如有任何帮助,我们将不胜感激。

列表<>;不会';t似乎能容纳500多个项目

从我所看到的情况来看:

foreach (String a in split)
{
    conversion.Add(Convert.ToInt32(a));
}

必须只添加500个项目,那么您正试图访问超出的元素

我认为您在文件的每一行末尾都缺少:

String line = codeString.ReadToEnd();
String[] split = line.Split(new string[] { "'r'n", "," }, StringSplitOptions.None);
foreach (String a in split)
{
    conversion.Add(Convert.ToInt32(a));
}