将ArrayList添加到ArrayList

时间:2012-03-13 17:27:05

标签: c# arraylist streamreader

我正在尝试嵌套ArrayLists,并尝试添加一个新的ArrayList作为现有的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 个答案:

答案 0 :(得分:3)

ArrayList.Add不返回ArrayList,只是返回int。

所以你想分两步添加元素。

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

注意:使用强类型集合(List<string>)可以避免此类错误。

答案 1 :(得分:3)

这一行:

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

事实上,你应该做的是使用类型的列表:

List<List<string>> myArgus;

这有助于捕获此类错误,因为编译器会抱怨是否添加了int而不是预期的List<string>

答案 2 :(得分:2)

你可以在技术上仍然一步到位

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