当前位置:  开发笔记 > 后端 > 正文

使用LINQ进行递归控制搜索

如何解决《使用LINQ进行递归控制搜索》经验,为你挑选了1个好方法。

如果我想在ASP.NET页面上找到选中的复选框,我可以使用以下LINQ查询.

var checkBoxes = this.Controls
                     .OfType()
                     .TakeWhile(cb => cb.Checked);

如果复选框嵌套在当前控件集合中,那么工作正常,但我想知道如何通过向下钻取到顶级控件的控件集合来扩展搜索.

这里问的问题是:

查找在ASP.NET中使用某个接口的控件

并且收到了非LINQ答案,我已经有自己的类型和ID作为扩展方法的递归控件搜索版本,但我只是想知道在LINQ中这样做有多容易?



1> Jon Skeet..:

从递归中取出类型/ ID检查,所以只需要"给我所有控件,递归"方法,例如

public static IEnumerable GetAllControls(this Control parent)
{
    foreach (Control control in parent.Controls)
    {
        yield return control;
        foreach(Control descendant in control.GetAllControls())
        {
            yield return descendant;
        }
    }
}

这有点效率低(在创建大量迭代器方面),但我怀疑你会有一个非常深的树.

然后,您可以将原始查询编写为:

var checkBoxes = this.GetAllControls()
                     .OfType()
                     .TakeWhile(cb => cb.Checked);

(编辑:将AllControls更改为GetAllControls并正确使用它作为方法.)

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有