2012-08-07 50 views
0

我有一個列表,我想將其他三個列表複製到列表中。將列表組合到列表列表中(C#)

// The main list 
List<List<string>> list= new List<List<string>>(); 

// The lists which I want to combine 
ArrayList sublist1= new ArrayList();; 
ArrayList sublist2= new ArrayList();; 
ArrayList sublist3= new ArrayList();; 

我想的是:

list[0].AddRange(sublist1); 
list[0].AddRange(sublist2); 
list[0].AddRange(sublist3); 

它不工作,因爲它是多維的列表。我需要這種類型的未來計劃清單。

我該如何完成它?

+1

我懷疑它並不適用於其他* *的原因(不創建實例,缺少類型特異性,加入'sublist2'兩次,等等)..工作什麼*是*真實的代碼和*是什麼*錯誤信息/異常/不正確的結果/不明原因的觀察行爲? (什麼是期望的結果?) – 2012-08-07 01:37:33

+0

它說'最好的重載方法匹配'System.Collections.Generic.List .AddRange(System.Collections.Generic.IEnumerable )'有一些無效參數' – Ned 2012-08-07 01:41:03

+0

所以你有它。您需要傳入符合'IEnumerable '的內容。 'ArrayList'不。與多維度無關。也許:'list [0] .AddRange(sublist1.Cast ())''(確保使用「Linq)..或者更好的是,輸入」子列表「(例如'List sublist1 = ..') 。 – 2012-08-07 01:41:56

回答

1

正如在評論中已經提到的,只是使用List<string>而不是ArrayList。 它與多維數組無關,只是類型不匹配。

然後你說List<List<string>>它基本上意味着創建列表類型,它將包含List<string>作爲項目(尖括號中的部分),所以您需要添加它們,而不是ArrayList s。同樣,List<string>表示將包含string作爲項目的列表類型。

1

改變一些IEnumerable<string>(字符串[]或List<string>或別的東西)

var sublist1 = new string[] {}; 
var sublist2 = new string[] {}; 
var sublist3 = new string[] {}; 

或類型子表都投

list[0].AddRange((IEnumerable<string>) sublist1); 
list[0].AddRange((IEnumerable<string>) sublist2); 
list[0].AddRange((IEnumerable<string>) sublist3); 

因爲你要使用的System.Collections.Generic.List<T> 的AddRange方法此方法的簽名是

public void AddRange(System.Collections.Generic.IEnumerable<T> collection) 

所以它需要IEnumerable作爲參數。

1

在註釋中,您需要傳遞IEnumerable後面的類型。例如,你可以改變你的ArrayList列出

// The main list 
List<List<string>> list = new List<List<string>>(); 

// The lists which I want to combine 
var sublist1 = new List<string>(); 
var sublist2 = new List<string>(); 
var sublist3 = new List<string>(); 

list[0].AddRange(sublist1); 
list[0].AddRange(sublist2); 
list[0].AddRange(sublist3);