gpt4 book ai didi

asp.net - 使用 LINQ 进行递归控制搜索

转载 作者:行者123 更新时间:2023-12-03 08:00:10 27 4
gpt4 key购买 nike

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

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

如果复选框嵌套在当前控件集合中,那效果很好,但我想知道如何通过深入到顶级控件的控件集合来扩展搜索。

问题是在这里问的:

Finding controls that use a certain interface in ASP.NET

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

最佳答案

从递归中取出类型/ID 检查,因此只需使用“递归地给我所有控件”的方法,例如

public static IEnumerable<Control> 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<CheckBox>()
.TakeWhile<CheckBox>(cb => cb.Checked);

(编辑:将 AllControls 更改为 GetAllControls 并将其正确用作方法。)

关于asp.net - 使用 LINQ 进行递归控制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/253937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com