我遇到的问题非常类似于此处提到的问题:
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
。即使这是一个更好的解决方案,我仍然很好奇为什么我不能以这种方式解决一系列的行列表。
答案 0 :(得分:3)
int last = contiguousLines[columnNum].Count;
由于列表为0索引,因此您已完成。
答案 1 :(得分:1)
在访问列
之前,您需要先添加一个ListcontiguousLines.Add(new List<line>());
contiguousLines[columnNum].Add(freeLines[0]);