尝试在 Windows 窗体 GroupBox 中包含的某些标签上设置属性,我编写了下面的循环。这很好用,但我不喜欢它,因为它(我认为不必要)双 foreach 嵌套。
我试图重写它以使其更清晰,只使用一个 foreach 和一个组合的 Linq 表达式,但是我所有的尝试在运行时都失败了,并出现了 CastException,从 GroupBox 到 Label,反之亦然。
有没有更清晰、更有效或更易读的方法来编写这个循环结构?
foreach (var gb in (from Control c in this.Controls where c is GroupBox select c)) foreach (Label tlbl in (from Control a in gb.Controls where a is Label && a.Tag != null && a.Tag.ToString() == "answer" select a)) tlbl.ForeColor = (tlbl.Name.Replace("lbl", "") == rb.Name) ? afterSelectColor : beforeSelectColor;
可读性是我的最高目标。考虑到这一点,是否值得尝试重写它?