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