C#

时间:2015-12-11 06:41:17

标签: c# .net

我创建了一个列表,然后对于此列表的每个成员,还有另一个子列表。目的是在子列表中的条件下保存一些数字。 这是我的代码:

List<Tuple<int, List<int>>>list_1= new list_1<List<Tuple<int, List<int>>>();

for (int i = 0; i < array_1.Length ; i++)
{
    for (int j = array_2.Length - 1; j > -1; j--)
    {
        if (j > i + 1)
        {
            list_1[i].Item2.Add(j);                    
        }
    }
}

其中array_2.Countarray_2.Count是整数。

但我有一个错误说:

Index was out of range. Must be non-negative and less than the size of the collection.

有谁能告诉我我在这里设置错误了吗?

2 个答案:

答案 0 :(得分:4)

嗯,不良行为的直接原因是list_1 没有项目(空):

  List<Tuple<int, List<int>>> list_1= new list_1<Tuple<int, List<int>>>();

所以第一次尝试阅读任何项目

  list_1[i]

将抛出超出范围的异常。您必须明确将项目添加到列表中(与Python不同):

  list_1.Add(new Tuple<int, int>(...));

修改:预计会出现以下情况:

  // Add items
  //TODO: what Item1 should be?
  while (i >= list_1.Count)
    list_1.Add(new Tuple<int, List<int>>(0, new List<int>())); //TODO: Item1 = 0?

  // Now it's safe to address list_1[i]:
  list_1[i].Item2.Add(j); 

答案 1 :(得分:1)

谢谢。以下是我发现的正确答案:

List<Tuple<int, List<int>>> list_1= new list_1<Tuple<int, List<int>>>();

for (int i = 0; i < 3; i++)
{
    list_1.Add(new Tuple<int, List<int>>(i, new List<int>()));
    for (int j = 5; j >= 0; j--)
    {
        if (j > i + 1)
        {
           list_1[i].Item2.Add(j); 
        }
    }
}