检查具有未知级别的嵌套列表中的属性值

时间:2018-10-23 15:06:03

标签: c# asp.net linq recursive-query

我有一个嵌套菜单-这里是一个简化的类:

#bottom-header-section {    
background-image: url('website/wertesystem/wp-content/uploads/2018/10/title-new.png');
    float:left;
    height: 120px;
    width: 800px;
    margin: inherit;
    background-position: right bottom; 
    background-repeat: no-repeat;
	
}

鉴于我有一个public class NestedNode { public string Url { get; set; } public List<NestedNode> Children { get; set; } } 的递归列表,我试图确定在任何级别上是否有任何后代处于活动状态。

这是要测试的代码:

NestedNode

我需要做的是弄清楚是否有任何父母子女活跃(在最顶层),以便我可以添加课程。目前,我的想法只深入了一个层次。

2 个答案:

答案 0 :(得分:1)

类似的东西

void Main()
{
    var nodes = new List<NestedNode>();

    var isActive = nodes.Any(n => n.AnyActive("url"));
}

public class NestedNode
{
    public NestedNode()
    {
        Children = Enumerable.Empty<NestedNode>();
    }
    public string Url { get; set; }
    public IEnumerable<NestedNode> Children { get; set; }

    public bool AnyActive(string url){ return Url==url || Children.Any(c => c.AnyActive(url));}
}

答案 1 :(得分:0)

在这种情况下,我可能会向NestedNode添加一个方法来递归检查条件-像这样:

public bool ExistsRecursive(Func<NestedNode, bool> predicate)
{
    if(predicate(this))
    {
        return true;
    }
    foreach(var node in Children)
    {
        return predicate(node);
    }
    return false;
}

然后,在您的Page_Load中,您所需要做的就是这个:

if(nodes.ExistsRecursive(n => n.Url == currentUrl))
{
    // current url is found in at least one node
}