0

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

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

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

THX 给大家。

4

2 回答 2

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);
    }
}
于 2013-09-18T09:26:02.420 回答
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

于 2013-09-18T09:28:49.113 回答