C#中的多维列表

Mik*_*e B 22 c# list

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

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>>

  • 我正要说它对我不起作用,然后我改变了我的DataGrid变量,现在我觉得自己像个白痴.谢谢! (5认同)

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)

易于阅读,易于编码.


Win*_*ith 5

可变结果从何而来?

该块:

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)


Shi*_*mmy 5

如果由于某种原因您不想定义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)

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

定义了最多 8 个成员的元组。

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