C# 无法断开foreach循环

C# 无法断开foreach循环,c#,C#,我喜欢选择一个节点,它的文本与这个递归方法的一些stirng值相匹配 private TreeNode GetSelectedNodes(TreeNode treeNode) { TreeNode result=new TreeNode(); foreach (TreeNode node in treeNode.Nodes) { if (node.Text=="Child1") {

我喜欢选择一个节点,它的文本与这个递归方法的一些stirng值相匹配

private TreeNode GetSelectedNodes(TreeNode treeNode)
    {
        TreeNode result=new TreeNode();
        foreach (TreeNode node in treeNode.Nodes)
        {
            if (node.Text=="Child1")
            {
                result=node;
                break;
            }
            else
            if (node.Nodes.Count > 0)
            {
                this.GetSelectedNodes(node);
            }
        }
        return result;
    }
在上面的代码中,一个节点文本与“Child1”匹配,但它没有返回节点,而是再次调用它; 请让我知道这个代码有什么问题。

试试这个

private TreeNode GetSelectedNodes(TreeNode treeNode)
{            
    foreach (TreeNode node in treeNode.Nodes)
    {
        if (node.Text=="Child1")
        {                   
            return node;
        }
        else
        {
            if (node.Nodes.Count > 0)
            {
                var result = this.GetSelectedNodes(node);
                if(result != null)
                {
                    return result;
                }
            }
        }
    }
    return null;
}

这样试试。一旦找到节点,就返回该节点,并一直返回

private TreeNode GetSelectedNodes(TreeNode treeNode)
{
    TreeNode result=new TreeNode();
    foreach (TreeNode node in treeNode.Nodes)
    {
        if (node.Text=="Child1")
        {
            result=node;
            return result;
        }
        else if (node.Nodes.Count > 0)
        {
            return this.GetSelectedNodes(node);
        }
    }
}

您是否尝试过使用调试器运行此操作-放置断点并逐行遍历代码,查看是否按预期设置了值?为什么完全忽略
GetSelectedNodes()
的返回值?此外,您可能应该使用
null
而不是新的
TreeNode()
初始化
result
。这样,如果
GetSelectedNodes()
返回
null
,您就知道要继续查找。发布的这段代码会导致无限循环吗?@user1666620除非树中有一个循环,这将使它不再是一棵树。问题似乎是代码从未验证为真。但相同的代码在其他情况下工作…我可以知道为什么它在中断后调用GetSelectedNodes(node)吗?在您的代码中,当它找到预期的节点时,它将中断当前循环,但当它返回到上一个递归调用时(家长电话)它继续该逻辑,并且不在其子调用分支中使用找到的节点,它只是忽略找到的节点。在新的源代码中,当在子分支中找到该节点时,它不会在父循环中继续搜索,它只返回来自子调用的找到的节点。您在else子句var result=this.Ge中遗漏了这一行tSelectedNodes(节点);if(result!=null)返回结果;