Asp.net
使用 LINQ 進行遞歸控制搜尋
如果我想在 ASP.NET 頁面上找到選中的複選框,我可以使用以下 LINQ 查詢。
var checkBoxes = this.Controls .OfType<CheckBox>() .TakeWhile<CheckBox>(cb => cb.Checked);如果復選框嵌套在目前控制項集合中,那效果很好,但我想知道如何通過深入研究頂級控制項的控制項集合來擴展搜尋。
問題在這裡被問到:
並且收到了非 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 並正確使用它作為一種方法。)