如何过滤嵌套列表?

时间:2013-09-18 09:21:29

标签: c#

我有一个奇怪的情况。我有一个这样的课:

public class Node
{
   public object Data { get; set }
   public bool Active { get; set; }
   public List<Node> Nodes { get; set; }
}

我想在实例上为Active属性创建一个过滤器。所以当Active属性为false时我不想显示。我怎么能解决这种情况?我会接受任何解决方案(递归,linq等)。

每个人都有THX。

2 个答案:

答案 0 :(得分:1)

你可以简单地添加一个名为ActiveNodes的只读属性,如下所示:

public class Node
{
   public object Data { get; set }
   public bool Active { get; set; }
   public List<Node> Nodes { get; set; }

   public IEnumerable<Node> ActiveNodes {
       get {
           foreach (var node in this.Nodes)
               if (node.Active)
                   yield return node;
       }
   }
}

然后使用ActiveNodes属性执行您通常对Nodes属性执行的任何操作。

正如@wudzik在评论部分提到的那样,你也可以用更实用的方式达到同样的效果:

public IEnumerable<Node> ActiveNodes {
    get {
        return this.Nodes.Where(node => node.Active);
    }
}

答案 1 :(得分:1)

试试这个

public class Node
{
    public object Data {get;set;}
    public bool Active {get;set;}
    public List<Node> Nodes {get;set;}
    public IEnumerable<Node> ActiveNodes
    {
        get 
        {
            return Nodes.Where(n => n.Active);
        }
    }
}

TreeView使用ActiveNodes而不是Nodes