You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Find()方法使用问题:节点添加子节点后无输出

问题分析与解决

核心错误点

  • 遍历对象错误:你在foreach中直接遍历nodes.Find(x => x.NodeName == "A"),该方法返回的是单个Node实例,而非它的子节点集合Child,因此无法遍历出子节点,导致无输出。
  • AddChild方法冗余:当前方法需要传入父节点参数,但调用时已经是父节点对象(如A)发起调用,完全可以简化逻辑,避免重复传参。

修正方案

方案1:简化AddChild方法(推荐)

修改Node类的AddChild方法,直接给当前节点添加子节点:

public class Node
{
    public string NodeName { get; set; }
    public LinkedList<Node> _item;
    public LinkedList<Node> Child { get { return _item; } set { _item = value; } }
    public Node()
    {
        _item = new LinkedList<Node>();
    }
    // 简化方法,直接为当前节点添加子节点
    public void AddChild(Node childNode)
    { 
         this.Child.AddLast(childNode);
    }
}

修正主方法的调用与遍历逻辑:

Node A = new Node { NodeName = "A" };
Node B = new Node { NodeName = "B" };
Node C = new Node { NodeName = "C" };
List<Node> nodes = new List<Node>();
nodes.Add(A); nodes.Add(B); nodes.Add(C);

// 从列表中获取父节点和子节点
var parentNode = nodes.Find(x => x.NodeName == "A");
var childB = nodes.Find(x => x.NodeName == "B");
var childC = nodes.Find(x => x.NodeName == "C");

// 添加子节点
parentNode.AddChild(childB);
parentNode.AddChild(childC);

// 遍历父节点的Child集合输出子节点名称
foreach(var child in parentNode.Child)
{
      Console.Write(child.NodeName); // 输出结果:BC
}

方案2:保留原AddChild方法,仅修正遍历逻辑

如果坚持使用原双参数的AddChild方法,只需修正遍历部分,改为遍历节点的Child集合:

// 原Node类不变
A.AddChild(nodes.Find(x => x.NodeName == "A"), nodes.Find(x => x.NodeName == "B"));
A.AddChild(nodes.Find(x => x.NodeName == "A"), nodes.Find(x => x.NodeName == "C"));

// 修正遍历对象为Child集合
foreach(var child in nodes.Find(x => x.NodeName == "A").Child)
{
      Console.Write(child.NodeName); // 输出结果:BC
}

内容的提问来源于stack exchange,提问作者Nguyễn Nguyễn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:17:28