2012-07-23 63 views
1

我想將數組添加到列表或多維數組(並非全部一次...)。但我真的不明白爲什麼這應該很難。將數組添加到數組 - 一個接一個地

可以說我有這樣的:

string[] a = { "h", "b"}; 
    string[] b = { "c", "a", "i" }; 
    string[] c = { "out", "in", "file", "test" }; 

    ArrayList x = null; 

    x.Add(a); //error: Object reference not set to an instance of an object. 
    x.Add(b); 
    x.Add(c); 

我可以用它代替ArrayList中也許

string[,] x = null; 

但沒有選項。新增

可以說我有一個未知字符串[]的大小與未知的大小 - 我如何將它們添加到列表/多維數組?再說一遍:我想逐個添加這些字符串[]。有任何想法嗎?

+0

只是想知道,這是什麼'ArrayList x = null;'? – oleksii 2012-07-23 14:45:56

+0

錯誤「對象引用未設置爲對象的實例」,以備將來參考,表示您忘記初始化對象。 – 2012-07-23 15:10:05

回答

6

你得到一個NullReferenceException,因爲沒有初始化列表:

string[] a = { "h", "b"}; 
string[] b = { "c", "a", "i" }; 
string[] c = { "out", "in", "file", "test" }; 

IList<string[]> x = new List<string[]>; 

x.Add(a); 
x.Add(b); 
x.Add(c); 

這是假設你正在構建一個2-d結構。如果您想將陣列「拼合」爲單個字符串列表,請創建一個列表,然後使用其List.AddRange方法。

+0

+1當你想要數組的數組,請調用x.ToArray() – Les 2012-07-23 14:50:19

+0

嗨thx,這是很好,但我怎麼可以遍歷這個列表?...我只得到System.String []作爲輸出 – miri 2012-07-24 11:02:32

+0

@ miri你是否試圖直接打印列表的元素? [這個鏈接](http://stackoverflow.com/a/8954141/335858)的答案解釋瞭如何去做。 – dasblinkenlight 2012-07-24 12:09:32

1

您還沒有做出要存儲在字符串數組中ArrayList的實例嘗試添加

ArrayList x = new ArrayList(); 
x.Add(a); 
... 
... 
1
ArrayList x = null; 
x.Add(a); 

這將工作,如果:

  1. 您創建了一個ArrayList的實例:

    ArrayList x = new ArrayList(); 
    

    你所做的只是聲明一個局部變量。

  2. 您注意將ArrayList.AddArrayList.AddRange分開。前者添加一個對象。在你的情況下,第一個元素(在第一個Add之後)本身就是一個數組。要訪問「h」需要x[0][0]AddRange將每個傳遞的集合元素作爲條件並將其添加到集合中。因此得到「h」將是x[0]而「b」將是x[1]

我想你想:

string[] a = { "h", "b"}; 
string[] b = { "c", "a", "i" }; 
string[] c = { "out", "in", "file", "test" }; 

ArrayList x = new ArrayList(); 

x.AddRange(a); 
x.AddRange(b); 
x.AddRange(c); 
1

關鍵字null實際上意味着 「沒有對象」。因此,當您編寫x.Add(a)時,您正試圖對不存在的東西調用Add方法。

您需要初始化您榜第一,這使一些在標x箱:

ArrayList x = new ArrayList(); 

現在,您可以撥打​​並按照預期的代碼將工作。

0

一種方式來做到這一點是:

List<List<string>> list = new List<List<string>>(); 

    list.Add(new List<string>(){ 
     "str1", "str2", "..." 
    }); 

一定要包括:使用System.Collections.Generic;

1

你缺少new爲ArrayList的,所以你應該做的是這樣的:

ArrayList x = new ArrayList(); 
    x.AddRange(a); 
    x.AddRange(b); 
    x.AddRange(c); 

你不能不能在Add方法使用數組,你不會得到任何編譯錯誤,但隨後當你將訪問你將得到的只是ToString的類型,這意味着該對象,如果你說:

string[] a = { "h", "b"}; 
    x.Add(a); 

,然後通過類似的元素儘量循環:

foreach (var item in x) 
    { 
    Console.WriteLine(item); 
    } 

你會結果:System.String[],我希望你不希望這樣,所以你需要使用AddRange方法這需要ICollection類型的參數,所以你說:

x.AddRange(a);

和如果你喜歡數組列表上做一個循環:

foreach (var item in x) 
     { 
      Console.WriteLine(item); 
     } 

你會得到輸出,

h 
b 
相關問題