【发布时间】:2026-01-09 08:25:04
【问题描述】:
试图获得所有不为空的List<Node>() 的最终列表。如何处理子节点?
public class Node
{
public string Name { get; set; }
public List<Node> Nodes { get; set; }
}
public class Program
{
static void Main(string[] args)
{
List<Node> Items = new List<Node>();
Items.Add(new Node { Name = "Test0" });
Items.Add(new Node { Name = "Test1" });
Items.Add(new Node { Name = "Test2" });
Items.Add(new Node { Name = "Test3" });
Items.Add(new Node { Name = "Test4" });
Items.Add(new Node { Name = "Test5" });
Items.Add(new Node
{
Name = "Test6",
Nodes = new List<Node>
{
new Node
{
Name = "Test6.1",
Nodes = new List<Node>
{
new Node
{
Name = "Test6.1.1", Nodes = new List<Node>()
}
}
},
}
});
Items.Add(new Node { Name = "Test7", Nodes = new List<Node> { } });
Items.Add(new Node { Name = "Test8", Nodes = new List<Node> { } });
var NotNullNodes = Items.SelectMany(m => m.Nodes);
}
}
【问题讨论】:
-
您需要一种方法来执行此递归。类似this post 的东西,或者你只需使用类似possible duplicate 的堆栈
-
从理论角度来看,有很多方法可以找到您的节点。它被称为树结构的遍历。值得一看this article
-
它必须是递归的吗?你想学习递归吗? Linq 本身不会遍历你的树。你需要这样做