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

如何用C#实现包含自身列表的Branch类构建树形结构?

可行性与实现方案

你的这个类定义完全可以用来构建树形结构,这种递归嵌套的类设计正是实现树形层级关系的标准方式——每个Branch对象作为节点,其内部的List<Branch>用来存储子节点,天然适配树的嵌套特性。

完善类定义

首先建议把原有的私有字段改为可访问的属性,同时增加必要的构造逻辑和节点标识(比如名称),让类更实用:

public class Branch
{
    // 节点标识,方便区分不同层级的节点
    public string Name { get; set; }
    
    // 子节点集合,自动初始化空列表避免空引用
    public List<Branch> Branches { get; set; } = new List<Branch>();

    // 构造函数,初始化节点名称
    public Branch(string name)
    {
        Name = name;
    }
}

构建树形结构示例

通过嵌套添加子节点即可快速搭建树:

// 创建根节点
var rootBranch = new Branch("根节点");

// 添加一级子节点
var firstLevelBranch1 = new Branch("一级节点1");
rootBranch.Branches.Add(firstLevelBranch1);

// 给一级节点1添加二级子节点
firstLevelBranch1.Branches.Add(new Branch("二级节点1-1"));
firstLevelBranch1.Branches.Add(new Branch("二级节点1-2"));

// 添加另一个一级子节点
var firstLevelBranch2 = new Branch("一级节点2");
rootBranch.Branches.Add(firstLevelBranch2);

遍历树形结构示例

由于是递归结构,用递归方法遍历最直观:

public static void TraverseBranch(Branch branch, int indent = 0)
{
    // 用缩进体现层级关系
    Console.WriteLine($"{new string(' ', indent * 2)}- {branch.Name}");
    foreach (var childBranch in branch.Branches)
    {
        TraverseBranch(childBranch, indent + 1);
    }
}

// 调用遍历方法
TraverseBranch(rootBranch);

执行后输出:

- 根节点
  - 一级节点1
    - 二级节点1-1
    - 二级节点1-2
  - 一级节点2

注意事项

  • 避免循环引用:不要将某个节点添加到自身的Branches集合,也不要形成A→B→A的闭环,否则遍历或序列化时会引发栈溢出。
  • 序列化处理:如果需要将树形结构序列化为JSON等格式,需配置序列化器支持递归引用。比如用Newtonsoft.Json时,可给Branch类添加[JsonObject(IsReference = true)]特性,防止序列化死循环。

内容的提问来源于stack exchange,提问作者Sadat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:35:35