3 回答
TA贡献1852条经验 获得超1个赞
从递归中取出类型/ 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);
TA贡献1802条经验 获得超5个赞
我建议进行AllControls递归的是:
public static IEnumerable<Control> AllControls(this Control parent)
{
foreach (Control control in parent.Controls)
{
yield return control;
}
foreach (Control control in parent.Controls)
{
foreach (Control cc in AllControls(control)) yield return cc;
}
}
第二个foreach看起来很奇怪,但这是我知道的“扁平化”递归调用的唯一方法。
- 3 回答
- 0 关注
- 601 浏览
添加回答
举报