代码之家  ›  专栏  ›  技术社区  ›  Fawad Naseer

如何在Treenode C中创建嵌套循环#

c#
  •  -1
  • Fawad Naseer  · 技术社区  · 7 年前

    我编写了一个嵌套循环来添加树节点,问题是 索引I 从不增加到 一 .

    在for each循环中:如果第一个父节点中没有更多的子节点,则循环将停止在 索引J 不会回到 索引I 增加到 一 .

    for (int i = 0; i < 23; i++)
    {
        for (int j = 0; j < 23; j++)
        {
            foreach (var item in myDictionaryReconstructed)
            {
                if ("TreeNode: " + item.Key == treeView1.Nodes[i].Nodes[j].ToString())
                {
                    treeView1.Nodes[i].Nodes[j].Nodes.Add(item.Value);
                    treeView1.ExpandAll();
                }
            } 
        } 
    }
    

    例如:

    父节点1 -子节点1 -子节点2 -子节点3

    父节点2 -子节点1 -

    父节点3 -子节点1

    程序执行到父节点-1和子节点3。 当子节点被选中并且找不到时,程序就停止在那里,而不是移动到下一个父节点。

    例外情况: 指定的参数超出了有效值的范围参数名索引。

    重复答案:在稍后讨论之后,我发现了上面的异常,我的问题在我不知道这是索引异常之前就被发布了。

    0 回复  |  直到 7 年前
        1
  •  2
  •   Ofir Winegarten    7 年前

    根据我们在上述评论中的讨论,

    以下代码引发 ArgumentOutOfRangeException

    treeView1.Nodes[i].Nodes[j]
    

    什么时候? i 或 j 大于实际引发异常的节点数,与任何其他数组一样。

    你可以这样做 foreach 或者不用魔法数字(23)使用 Nodes.Count .

    所以您的代码可能如下所示:

    for (int i = 0; i < treeView1.Nodes.Count; i++)
    {
        for (int j = 0; j < treeView1.Nodes[i].Nodes.Count; j++)
        {
            foreach (var item in myDictionaryReconstructed)
            {
                if ("TreeNode: " + item.Key == treeView1.Nodes[i].Nodes[j].ToString())
                {
                    treeView1.Nodes[i].Nodes[j].Nodes.Add(item.Value);
                    treeView1.ExpandAll();
                }
            } 
        } 
    }