2012-03-13 149 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 });