C#实现支持任意层级的递归树形模型遍历方法
正确的递归实现方案
你的递归代码层级计算错误的核心问题是使用了 level++,这会修改当前方法内的level变量,导致后续同级节点的层级被错误递增。同时还存在未定义变量category的问题,以下是修正后的实现:
修正后的完整代码
public IEnumerable<Model> GetItems(string link, int level = 1) { foreach (var node in loadItems(link)) { yield return new Model(node, level); // 递归传递层级时用level+1,不修改原level变量 foreach (var subNode in GetItems(node.link, level + 1)) { yield return subNode; } } }
关键说明
- 层级计算修正:用
level + 1替代level++,前者生成新的层级值,不会改变当前方法中的level,确保每个子节点的层级都是父层级+1,同级节点层级一致。 - 变量名修正:将原代码中未定义的
category替换为遍历的node变量,避免编译错误。 - 保留懒加载特性:继续使用
yield return实现延迟加载,和原代码行为一致,避免一次性加载所有节点带来的性能问题。
调用示例
// 从根节点开始遍历,默认层级从1开始 var allItems = GetItems(rootLink);
内容的提问来源于stack exchange,提问作者user3544503
相关产品推荐
相关产品推荐

