2012-03-13 147 views
0

我想嵌套ArrayLists,并试图添加一个新的ArrayList作为现有的一个元素,但它似乎并没有工作。下面的代码:将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。

+4

你真的应该强烈'名单键入您的列表'。 – 2012-03-13 17:28:35

+0

您试过了吗?List myArgus = new List (File.ReadAllLines(path));'? – 2012-03-13 17:32:12

+0

只是好奇心:你为什么*要求使用ArrayList? – Heinzi 2012-03-13 17:36:00

回答

3

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

所以你想添加2个步骤的元素。

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

注意:使用强类型集合(List<string>),以避免这种类型的错误。

+0

我得到该代码的错误,关于方法'Add'没有定义的对象。我们不能为此使用强类型集合,它必须是如此定义的ArrayList:'ArrayList myArgus = new ArrayList();' – 2012-03-13 17:34:06

+0

或者,您可以使myArgus成为List ,以便它“知道”那里,如果你计划在myArgus里面有ArrayLists。 – 2012-03-13 17:35:46

+0

@MartinHoe,我添加了演员。 – 2012-03-13 17:59:53

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

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

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