Добавление ArrayList в ArrayList - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь создать вложенные списки ArrayLists и пытался добавить новый ArrayList как элемент существующего, но, похоже, он не работает.Вот код:

    private void readDataFile()
    {
        // Open stream reader
        StreamReader reader = new StreamReader(dataFileLoc);

        string line = string.Empty;
        line = reader.ReadLine();
        myArgus.Add(new ArrayList().Add(line));

        while ((line = reader.ReadLine()) != null)
        {
            // TODO
        }

        // Close the reader
        reader.Close();
    }

Если я добавлю точку останова и посмотрю на данные в myArgus (уже существующий ArrayList), первый элемент будет просто 0.Это должен быть ArrayList, первый элемент которого имеет вид 10016 (это первая строка текстового файла).

Что я здесь не так делаю?

Спасибо!

Редактировать: стоит отметить, что мы должны использовать ArrayList.

Ответы [ 3 ]

3 голосов
/ 13 марта 2012

Эта строка:

myArgus.Add(new ArrayList().Add(line));

добавляет 0 в качестве первого элемента к myArgus. Зачем? Поскольку возвращаемое значение ArrayList.Add определяется следующим образом:

Возвращаемое значение
Тип: System.Int32
Индекс ArrayList, к которому добавлено значение.

Поскольку ваш new ArrayList() не содержит никаких элементов, line добавляется в индекс 0.

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

var subList = new ArrayList();
subList.Add(line);
myArgus.Add(subList);

На самом деле следует *1026* использовать напечатанных списков:

List<List<string>> myArgus;

Это помогает отследить такого рода ошибки, потому что компилятор жалуется, если вместо ожидаемого List<string>.

добавляется int.
3 голосов
/ 13 марта 2012

ArrayList.Add не возвращает ArrayList, а просто int.

Итак, вы хотите добавить элементы в 2 этапа.

int index = myArgus.Add(new ArrayList());
((ArrayList)myArgus[index]).Add(line);

Примечание. Используйте строго типизированные коллекции (List<string>), чтобы избежать ошибок этого типа.

2 голосов
/ 13 марта 2012

Технически вы все еще можете сделать это за один шаг

myArgus.Add(new ArrayList() { line } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...