我正在尝试嵌套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。
答案 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 } );