2015-12-11 1 views
0

Я создал список, а затем для каждого члена этого списка есть еще один под-список. Цель состоит в том, чтобы сохранить некоторые числа под условием в под-списках. Вот мой код:Ошибка в подсписке списка в C#

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.Count и array_2.Count целые числа.

Но у меня есть ошибка, которая говорит:

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

Может кто-нибудь пожалуйста, скажите мне, что я устанавливаю неправильно здесь?

ответ

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); 
+0

@Saber Jalilzadeh: поскольку вы не знаете фактический размер - вы должны * добавлять * предметы, когда хотите увеличить размер; * list * не является * массивом * с * фиксированной длиной *; добавлять/вставлять/удалять элементы всякий раз, когда вы хотите –

+0

@Saber Jalilzadeh: вам нужно добавить в 'list_1', а не в его * неиспользуемый элемент *' list_1 [i] ' –

+0

@Saber Jalilzadeh: ну, принцип тот же (вам нужно добавить элементы в 'list_1' inself), имплантация немного изменилась; подумайте над тем, что вы хотите поместить в 'Item1' каждого' Tuple' –

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); 
     } 
    } 
} 
Смежные вопросы