C#列表行列表索引超出范围

时间:2015-04-17 03:25:29

标签: c# list outofrangeexception

我遇到的问题非常类似于此处提到的问题:

ArgumentOutOfRangeException Was Unhandled

我认为contiguousLines[columnNum].Add(...)是造成错误的原因,因为我正在使用columnNum索引

List<line> freeLines = new List<line>();
List<List<line>> contiguousLines = new List<List<line>>();

while(freeLines.Count > 0)
{
    int columnNum = contiguousLines.Count;
    contiguousLines[columnNum].Add(freeLines[0]);
    freeLines.RemoveAt(0);

    for(int i = 0; i < freeLines.Count; i++)
    {
        int last = contiguousLines[columnNum].Count;
        if(contiguousLines[columnNum][last].upDown(freeLines[i]))
        {
            contiguousLines[columnNum].Add(freeLines[i]);
            freeLines.RemoveAt(i);
            i = -1;
        }
    }
    // Further code that pulls individual elements from freeLines and
    // is intended to place them into contiguousLines.

}

函数upDown只是比较行的起点和终点,以查看其中一个(freeLines[i])是否是另一个(contiguousLines[columnNum])的下游。

System.ArgumentOutOfRangeException未处理   消息=索引超出范围。必须是非负数且小于 集合。参数名称:index

处理列表列表时的正确语法是什么?

(注意:我不经常在C#中编程,这个项目是我编写的,并且在C ++中工作只是为了稍后通知C#将更好地与我的工作的其余工具一起使用。在C ++中我使用了向量对于我的容器,但显然复制/粘贴逻辑将不起作用,因为我不知道列表的一些细微差别。) 我想也可以只创建一个包含行列表的ContiguousLine类,然后从List<ContiguousLine>添加到freeLines。即使这是一个更好的解决方案,我仍然很好奇为什么我不能以这种方式解决一系列的行列表。

2 个答案:

答案 0 :(得分:3)

int last = contiguousLines[columnNum].Count;

由于列表为0索引,因此您已完成。

答案 1 :(得分:1)

在访问列

之前,您需要先添加一个List
contiguousLines.Add(new List<line>());
contiguousLines[columnNum].Add(freeLines[0]);