C# 列表似乎不能包含超过500项

C# 列表似乎不能包含超过500项,c#,list,C#,List,我遇到了ArgumentOutOfRange异常。它所涉及的代码如下: public static void readPuzzle() { List<int> conversion = new List<int>(factor * factor * factor * factor); int count = 0; using (StreamReader codeString = new StreamReader(path)) {

我遇到了ArgumentOutOfRange异常。它所涉及的代码如下:

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++;
                    }
                }
            }
        }
    }
}

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

从我所看到的情况来看:

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));
}

检查拆分的大小以查看实际添加到列表中的元素数量。值在哪里定义?是什么?可能是你正在读的文件只有500行吗?list的构造函数参数没有填充list,它只为625保留空间,只是作为速度/内存优化。我同意MAV的说法,您的split方法中的元素可能少于因数^4,我认为您缺少文件中每行末尾的。因此,下一行的最后一个元素和第一个元素在拆分后的restul的一个元素中。@Jeroen您是指因子*4吗?x^y,取决于上下文,要么意味着x或y,要么意味着powx,y。哦,我的上帝,你是对的!似乎我忘记在我正在阅读的文本文件中放入125项。尝试了我准备的另一个文件,它运行得很好。马修麦克维格:我很难理解你的答案。但这可能是对的。阵列初始化时使用的容量完全无关。这只是一个指示性的数字。有效添加了多少元素是相关的。事实上,数组列表太短了,不是太长。@Codo可以随意编辑它,让它更清楚,我的回答是代码块只添加了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));
}