C#中的多维列表

目前我使用一个列表来存储我的数据的一部分,并且它以这种格式完美地工作:

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

现在,我想在此列表中添加另一行,因为它可以像这样工作:

 NAME EMAIL ------------------------------------------------------ Joe Bloggs joe@bloggs.com George Forman george@formangrills.co Peter Pan me@neverland.com 

我尝试使用此代码在列表中创建列表,此代码在foreach循环中的另一个方法中使用:

 // Where List is instantiated List<List> list2d = new List<List> ... // 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 ... ... 

我在哪里错了。 如何使用我正在使用的代码获得我想要的输出?

为什么不使用List而不是List>

强烈推荐更像这样的东西:

 public class Person { public string Name {get; set;} public string Email {get; set;} } var people = new List(); 

易于阅读,易于编码。

变量结果来自哪里?

这个块:

 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(); list.Add(p.name); list.Add(p.email); list2d.Add(list); } 

您应该使用ListHashSet

请显示更多代码。

如果最后一段代码声明并初始化循环外的list变量,则基本上重用相同的列表对象,从而将所有内容添加到一个列表中。

还显示.Capacity和.Count在哪里发挥作用,你是如何得到这些值的?

它已经过时了,但我想我会增加两美分……不确定它是否可行但尝试使用KeyValuePair:

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

你最终会得到这样的东西:

  LinkList[0] =  LinkList[1] =  LinkList[2] =  

等等…

如果由于某种原因您不想定义Person类并按照建议使用List ,则可以使用元组,例如(C#7):

 var people = new List<(string Name, string Email)> { ("Joe Bloggs", "joe@bloggs.com"), ("George Forman", "george@formangrills.co"), ("Peter Pan", "me@neverland.com") }; var georgeEmail = people[1].Email; 

NameEmail成员名称是可选的,您可以省略它们并分别使用Item1Item2访问它们。

最多可以有8个成员定义元组。

对于早期版本的C#,您仍然可以使用List> (或者最好使用此NuGet包的 ValueTuple ),但您不会受益于自定义成员名称。