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

C# 如何从嵌套列表中获取/显示项目<;列表<;int>&燃气轮机;在C中#,c#,list,C#,List,我在C#中遇到了一个问题,无法显示嵌套int列表中的一个元素。 当我有一份清单时: List<List<int>> List = new List<List<int>>(); 我如何显示,例如,仅显示“1”? 当我尝试这个时: this.textBox2.Text = (Convert.ToString(List[0][0])); 我的textBox2是空的,但当我试图计算列表并检查列表中有多少子列表时,它工作正常(显示“3”): 但第1个子列

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

List<List<int>> List = new List<List<int>>();
我如何显示,例如,仅显示“1”? 当我尝试这个时:

this.textBox2.Text = (Convert.ToString(List[0][0]));
我的textBox2是空的,但当我试图计算列表并检查列表中有多少子列表时,它工作正常(显示“3”):

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

谢谢你的帮助

编辑: 我发现当我填写清单时,例如:

SubList.Add(2);
SubList.Add(3);
List.Add(SubList);
SubList.Clear();
当使用相同的子列表并清除它时,问题看起来就像清除列表一样

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

这对我很有用:

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();

我不知道您是如何填写列表的。

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

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

这类似于:

  • “创造”纸袋
  • 把苹果放在纸袋里
  • 把纸袋放在盒子里
  • 清空纸袋
你把包放进盒子里并不意味着你克隆了包。无论您是将袋子视为袋子还是视为盒子中的物品,袋子都会被清空

我想:

  • 除非需要,否则不清除子列表
  • 添加子列表时,为每个子列表创建不同的列表实例:

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

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

  • 你能告诉我你是怎么填的吗?您显示的语法无效。如果无法获取列表的第一项并且
    Count
    返回零,则听起来您的列表实际上是空的。在获取第一个项时,应该得到一个索引越界错误,但必须捕获该异常并忽略它。不要那样做。这是一件非常糟糕的事情。问题一定在代码中的其他地方。这里有一个小提琴显示它在工作(类似于已经提供的答案):如果能看到更多相关的代码会很有帮助。我编辑了我的帖子,问题是当我只使用一个子列表来填充列表时,例如在循环中。他想从中间列表读取值,所以列表[1][0]应该在您的示例中返回数字2。列表[I][j]是访问课程嵌套列表的正确方法。但在上次编辑之前,这个答案的版本遗漏了它。你是对的。感谢您指出这一点。因此,唯一的方法是使用
    List SubList=new List()在循环的每个开始处?要么如此,要么在添加子列表时复制它-每个子列表都需要是不同的引用
    
    SubList.Add(2);
    SubList.Add(3);
    List.Add(SubList);
    SubList.Clear();
    
    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();
    
    this.textBox2.Text = List[2][1].ToString();
    
    SubList.Add(2);
    SubList.Add(3);
    List.Add(SubList);
    SubList.Clear();
    
    List.Add(new List<int>(SubList));  // make a copy
    
    SubList = new List<int>();