如何从嵌套列表中获取/显示项目<;列表<;int>>;在C#中

本文关键字:lt 列表 gt int 显示 嵌套 获取 项目 | 更新日期: 2023-09-27 17:58:04

我在C#中遇到了一个问题,无法显示嵌套int列表中的一个元素。当我有一个列表时:

List<List<int>> List = new List<List<int>>();

和子列表:

List<int> SubList = new List<int>();

列表由三个子列表(SubList)填充,如:

List = ((1),(2,3),(4,5,6))

我怎样才能只显示例如"1"?当我尝试这个:

this.textBox2.Text = (Convert.ToString(List[0][0]));

我的textBox2是空的,但当我试图计数List并检查List中有多少个子列表时,它工作正常(显示"3"):

this.textBox2.Text = (Convert.ToString(List.Count));

但是第一个子列表中有多少元素不起作用(显示"0",应该显示"1"):

this.textBox2.Text = (Convert.ToString(List[0].Count));

谢谢你的帮助。

编辑:我在填写清单时发现了这一点,例如:

SubList.Add(2);
SubList.Add(3);
List.Add(SubList);
SubList.Clear();

问题出现了——比如,当使用相同的子列表并清除它时,也会清除列表。

如何正确地只使用同一个子列表来填写列表?

如何从嵌套列表中获取/显示项目<;列表<;int>>;在C#中

您正在创建一个子列表,将其添加到父列表,然后清除子列表

SubList.Add(2);
SubList.Add(3);
List.Add(SubList);
SubList.Clear();

请记住,列表是引用,这意味着外部列表是内部列表的参考列表。当清除内部列表时,外部列表具有对同一内部列表的引用,因此它也会被清除(因为它是同一实例)。

类似于:

  • "创建";纸袋
  • 把苹果放在纸袋里
  • 把纸袋放在盒子里
  • 清空纸袋

仅仅因为你把袋子放在盒子里并不意味着你克隆了袋子。无论你看的是袋子还是盒子里的物品,袋子都是空的。

我会:

  1. 除非需要,否则不清除子列表

  2. 添加时为每个子列表创建不同的列表实例:

     List.Add(new List<int>(SubList));  // make a copy
    
  3. 只需为每个子列表使用不同的实例:

     SubList = new List<int>();
    

这对我有效:

List<List<int>> List = new List<List<int>>();
List<int> SubList = new List<int>();

List.Add(new List<int> { 1 });
List.Add(new List<int> { 2, 3 });
List.Add(new List<int> { 4, 5, 6 });
this.textBox2.Text = List[0].Count.ToString();

这也可以完美地显示"5":

this.textBox2.Text = List[2][1].ToString();

我不知道你是怎么填的。