2015-07-02 5 views
0

Я использую Список списков в моем проекте. Когда я запускаю программу, я получаю ArgumentOutOfRangeException. Но в списке нет диапазона. я объявил список, как это:Получение ArgumentOutOfRangeException в списках

public static List<List<string>> list = new List<List<string>>(); 

Теперь я хочу, чтобы добавить свое имя в первом «списке», который находится в списке списков.

list[0].Add("Hussam"); //Here i get ArgumentOutOfRange Exception. 

Что теперь делать?

+1

вам нужно добавить элемент в список .... прямо сейчас, когда вы создаете в нем нет НИКАКИХ элементов. вам нужно сделать: list.Add (новый список («hussam»)). без каких-либо элементов ... длина равна 0, и поэтому вы не можете получить доступ к коллекции с помощью индексатора, и даже если бы вы это сделали ... вы можете не индексировать правильный действительный элемент –

ответ

2

Вы хотите добавить элемент в первый элемент в пустом списке ... Это не сработает. Во-первых, добавить список в другой список:

public static List<List<string>> list = new List<List<string>>(); 

List<string> innerList = new List<string>(); 
list.Add(innerList); 

innerList.Add("Hussam"); 
11

Но нет диапазон, указанный в списке

Нет, есть индекс указано (в качестве аргумента), и вот что вне диапазона. Посмотрите на свой код:

list[0].Add("Hussam"); 

Это пытается использовать первый список в list - но list пуст, там это не первый элемент. Диапазон допустимых аргументов для индексатора пуст, в основном.

Итак, сначала вы хотите:

list.Add(new List<string>()); 

Теперь list[0] будет правильно ссылаться на ваш пустой List<string>, так что вы можете добавить "Hussam" к нему.

+0

Спасибо Alot ... :) –

0

Вы не можете получить доступ к list[0], так как нет элемента в индексе 0. Список пуст.

Вам нужно добавить новый список, как это:

list.Add(new List<string> { "Hussam" }); 

или назначить список индекса 0, а затем добавить к нему в соответствии с вашим публикуемым кодом:

list.Add(new List<string>()); 
list[0].Add("Hussam"); 

Если вы дон всегда знать, будет ли список пустым или нет, вы можете использовать FirstOrDefault (метод LINQ), чтобы проверить, есть ли какая-либо запись в индексе 0 и назначить ее, если нет, в противном случае используйте существующий внутренний список:

var innerList = list.FirstOrDefault(); 
if (innerList == null) 
{ 
    innerList = new List<string>(); 
    list.Add(innerList); 
} 

innerList.Add("Hussam"); 
0

Почему вы создаете список списка? Не было бы достаточно? Что здесь происходит, внутренний список не инициализируется.

list.Add(new List<string>()); 
list[0].Add("Jimmy"); 
+0

почему голос? шутки в сторону? – JimmyV

+0

Почему, по-вашему, OP не нужен внутренний список? Может, и так. –

+0

Это был вопрос. – JimmyV

0

Проблема, ваш вложенный список не был инициализирован с ничего.

Итак, вызов первого элемента вложенного списка правильно говорит вам, что в нем ничего нет.

Для проверки:

int superlistCounter = 1; 
int sublistCounter = 1; 

foreach(var sublist in list) 
{ 
    Console.WriteLine("Now in List #" + superlistCounter); 
    foreach(var item in sublist) 
    { 
     Console.WriteLine("List item #" + sublistCounter + ": " + item) 
    } 
} 

Выход будет:

Now in List #1 

Это звучит, как вы ожидали:

Now in List #1 
List Item #1: Hussam 

Чтобы исправить это, просто инициализировать свой список!

public static List<List<string>> list = new List<List<string>>(); 

// ... 

List<string> subList1 = new List<string>(); 
list.Add(subList1); 

subList1.Add("Hussam"); 
0

В этом случае ocurred исключения, потому что вы пытались Асесс индекс, который не существует, то вы должны добавить внутренний первоначальный список, который может быть сделан следующим образом:

list.Add(new new List<string>()); 

Или, если вы хотите добавить имя непосредственно:

list.Add(new new List<string>(){"Hussam"}); 
0

ИТАК первых, вы должны понимать, что «индекс» приходит только после того, как значение было объявлено. Списки ведут себя по-другому. Они не похожи на массивы. Вы получаете индекс, в котором хотите сохранить элемент, и когда вы это делаете, вы используете код array[index] = value;.

Но в List, чтобы дать значение совершенно новому предмету, вы используете метод Add(value).

Так вот напоминание: Systems.Collections.Generic.List <> не имеет ничего общего с массива [] s

Смежные вопросы