目前我使用一个列表来存储我的数据的一部分,并且它以这种格式完美地工作:
Item
----------------
Joe Bloggs
George Forman
Peter Pan
Run Code Online (Sandbox Code Playgroud)
现在,我想在此列表中添加另一行,因为它可以这样工作:
NAME EMAIL
------------------------------------------------------
Joe Bloggs joe@bloggs.com
George Forman george@formangrills.co
Peter Pan me@neverland.com
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用此代码在列表中创建列表,并且此代码在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);
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到了这个结果:
Capacity Count
----------------
16 16
16 16
16 16
... ...
Run Code Online (Sandbox Code Playgroud)
我在哪里错了.如何使用我正在使用的代码获得我想要的输出?
Tho*_*que 46
你为什么不用一个List<People>
而不是一个List<List<string>>
?
Sai*_*udo 38
强烈推荐更像这样的东西:
public class Person {
public string Name {get; set;}
public string Email {get; set;}
}
var people = new List<Person>();
Run Code Online (Sandbox Code Playgroud)
易于阅读,易于编码.
可变结果从何而来?
该块:
foreach (People p in ppl.results) {
list.Add(results.name);
list.Add(results.email);
list2d.Add(list);
}
Run Code Online (Sandbox Code Playgroud)
应该更像是这样:
foreach (People p in ppl.results) {
var list = new List<string>();
list.Add(p.name);
list.Add(p.email);
list2d.Add(list);
}
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因您不想定义Person
类并List<Person>
按照建议使用,您可以使用元组,例如 (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;
Run Code Online (Sandbox Code Playgroud)
在Name
和Email
成员名称是可选的,你可以忽略它们,并将它们使用访问Item1
和Item2
分别。
定义了最多 8 个成员的元组。
对于早期版本的 C#,您仍然可以使用List<Tuple<string, string>>
(或最好ValueTuple
使用此 NuGet 包),但您不会从自定义成员名称中受益。