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); }
您应该使用List
或HashSet
。
请显示更多代码。
如果最后一段代码声明并初始化循环外的list
变量,则基本上重用相同的列表对象,从而将所有内容添加到一个列表中。
还显示.Capacity和.Count在哪里发挥作用,你是如何得到这些值的?
它已经过时了,但我想我会增加两美分……不确定它是否可行但尝试使用KeyValuePair:
List> LinkList = new List>(); LinkList.Add(new KeyValuePair, ?>(Object, Object));
你最终会得到这样的东西:
LinkList[0] =
等等…
如果由于某种原因您不想定义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;
Name
和Email
成员名称是可选的,您可以省略它们并分别使用Item1
和Item2
访问它们。
最多可以有8个成员定义元组。
对于早期版本的C#,您仍然可以使用List
(或者最好使用此NuGet包的 ValueTuple
),但您不会受益于自定义成员名称。