public class Node
{
public object Data { get; set }
public bool Active { get; set; }
public List<Node> Nodes { get; set; }
}
我想在实例上为Active属性创建一个过滤器。所以当Active属性为false时我不想显示。我怎么能解决这种情况?我会接受任何解决方案(递归,linq等)。
每个人都有THX。
答案 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