2009-08-03 55 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),但是您不会从定制成员名称中受益。