2009-08-03 67 views
18

目前我使用一個列表來存儲我的數據的一個組成部分,它的正常使用格式爲:多維列表

Item 
---------------- 
Joe Bloggs 
George Forman 
Peter Pan 

現在,我希望將其他行添加到這個列表,它的工作就像這樣:

NAME     EMAIL 
------------------------------------------------------ 
Joe Bloggs    [email protected] 
George Forman   [email protected] 
Peter Pan    [email protected] 

我已經使用這個代碼創建一個列表中的列表試過了,這段代碼是另一種方法用在foreach循環:

// Where List is instantiated 
List<List<string>> list2d = new List<List<string>> 

... 

// Where DataGrid instance is given the list 
dg.DataSource = list2d; 
dg.DataBind(); 

... 


// In another method, where all people add their names and emails, then are added 
// to the two-dimensional list 
foreach (People p in ppl.results) { 
    list.Add(results.name); 
    list.Add(results.email); 
    list2d.Add(list); 
} 

當我運行它,我得到這樣的結果:

Capacity Count 
---------------- 
16  16 
16  16 
16  16 
...  ... 

我要去哪裏錯在這裏。我怎樣才能得到我現在使用的代碼所需的輸出?

+1

也許我是誤解,但這看起來不像列表清單,而是一個記錄列表,每個列表都有兩個字段。如果是這樣,也許這就是你應該如何建模。 – 2009-08-03 12:40:22

回答

40

你爲什麼不使用List<People>代替List<List<string>>

+3

我剛纔說它不適合我,然後我改變了我的DataGrid變量,現在我覺得自己像個白癡。謝謝! – 2009-08-03 12:51:01

0

請顯示更多代碼。

如果最後一段代碼在循環外部聲明並初始化list變量,則基本上將重用相同的列表對象,從而將所有內容添加到一個列表中。

同時顯示.Capacity和.Count的作用,你是如何得到這些值的?

+0

然後你需要向我們展示你的代碼。如果你無法制作自己的代碼,那麼除非你發佈它,否則我們不能。 – 2009-08-03 12:46:07

4

變量結果來自哪裏?

塊:

foreach (People p in ppl.results) { 
    list.Add(results.name); 
    list.Add(results.email); 
    list2d.Add(list); 
} 

可能應該多讀這樣的:

foreach (People p in ppl.results) { 
    var list = new List<string>(); 
    list.Add(p.name); 
    list.Add(p.email); 
    list2d.Add(list); 
} 
1

您應該使用List<Person>HashSet<Person>

31

強烈推薦更多的東西是這樣的:

public class Person { 
    public string Name {get; set;} 
    public string Email {get; set;} 
} 

var people = new List<Person>(); 

更容易閱讀,容易代碼。

+1

我喜歡這個答案,在我的情況下使課堂更加乾淨和合適:) – CodeIt 2016-11-16 16:27:07

0

這是舊的,但認爲我想補充我的兩分錢...... 不知道這是否會工作,但嘗試使用KeyValuePair:

List<KeyValuePair<?, ?>> LinkList = new List<KeyValuePair<?, ?>>(); 
LinkList.Add(new KeyValuePair<?, ?>(Object, Object)); 

你會用這樣的事情結束了:

LinkList[0] = <Object, Object> 
LinkList[1] = <Object, Object> 
LinkList[2] = <Object, Object> 

等等...

0

如果由於某種原因,你不希望定義一個Person類,並使用List<Person>作爲建議,你可以使用一個元組,S UCH爲(C#7):

var people = new List<(string Name, string Email)> 
{ 
    ("Joe Bloggs", "[email protected]"), 
    ("George Forman", "[email protected]"), 
    ("Peter Pan", "[email protected]") 
}; 

var georgeEmail = people[1].Email; 

NameEmail成員名稱是可選的,你可以忽略它們分別使用Item1Item2訪問它們。

定義了多達8個成員的元組。

對於早期版本的C#,仍然可以使用List<Tuple<string, string>>(或最好是ValueTuple使用this NuGet package),但是您不會從定製成員名稱中受益。