试图获得所有List<Node>()
不为null的列表的末尾。如何使用子节点执行此操作?
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 )
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句