这是我会怎么做覆盖的节点列表,不管它有多深:
Node类:
public class Node
{
public Guid Id { get; set; }
public DateTime Created { get; set; }
public List<Node> Nodes { get; set; }
public Node()
{
this.Nodes = new List<Node>();
}
public List<Node> FindNodes(Func<Node, bool> condition)
{
List<Node> resList = new List<Node>();
if (this.Nodes != null && this.Nodes.Count > 0)
{
this.Nodes.ForEach(x =>
{
resList.AddRange(x.FindNodes(condition));
if (condition(x))
resList.Add(x);
}
);
}
return resList;
}
}
例如具有这个节点列表:
List<Node> nodeList = new List<Node>()
{
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 01, 10),
Nodes = {
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 01, 11) },
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 01, 12) } } },
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 02, 10),
Nodes = {
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 02, 11),
Nodes = {
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 11, 11) },
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 12, 12),
Nodes = {
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2011, 11, 11) },
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2011, 12, 12) } } } } },
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 02, 12) } } },
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 03, 10),
Nodes = {
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 03, 11) },
new Node() { Id = Guid.NewGuid(), Created = new DateTime(2009, 03, 12) } } },
};
我能找到的所有子节点我想这样的:
List<Node> resList = new List<Node>();
nodeList.ForEach(x =>
resList.AddRange(x.FindNodes(y => y.Created.Day == 12)));
你可以看任何你想要的东西。在上面的例子中,我搜索了在任何月份和年份的第12天创建的节点。
您不需要通过列表结果与ref关键字。 –
empi
2009-11-15 21:55:14