试图获得所有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);
}
}
最佳答案
另一个 linq 递归解决方案:
public static IEnumerable<Node> GetAllNodes( Node root )
{
if( root == null )
{
yield break;
}
yield return root;
if ( root.Nodes == null )
{
yield break;
}
foreach ( Node descendant in root.Nodes.SelectMany( GetAllNodes ) )
{
yield return descendant;
}
}
像这样使用:
Items.SelectMany( GetAllNodes )
关于c# - Linq 递归搜索节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001282/