【发布时间】:2017-11-06 11:37:42
【问题描述】:
到目前为止,我已经尝试了 var 并且无法使其工作。 代码:
var a = new { drives1, ipAdd1, spotify1, timeAndDate1, activeWindow1, reminders11, weather1 };
然后 foreach (Control/var c in a) 并得到错误,我确信必须有一个简单的方法,而不需要下面的所有代码。
当前代码:
foreach (Control c in drives1.Controls)
{
if (c.Name.StartsWith("SC")) { c.ForeColor = Color.FromArgb(rr, gg, bb); }
}
foreach (Control c in ipAdd1.Controls)
{
if (c.Name.StartsWith("SC")) { c.ForeColor = Color.FromArgb(rr, gg, bb); }
}
foreach (Control c in spotify1.Controls)
{
if (c.Name.StartsWith("SC")) { c.ForeColor = Color.FromArgb(rr, gg, bb); }
}
foreach (Control c in timeAndDate1.Controls)
{
if (c.Name.StartsWith("SC")) { c.ForeColor = Color.FromArgb(rr, gg, bb); }
}
foreach (Control c in activeWindow1.Controls)
{
if (c.Name.StartsWith("SC")) { c.ForeColor = Color.FromArgb(rr, gg, bb); }
}
foreach (Control c in reminders11.Controls)
{
if (c.Name.StartsWith("SC")) { c.ForeColor = Color.FromArgb(rr, gg, bb); }
}
foreach (Control c in weather1.Controls)
{
if (c.Name.StartsWith("SC")) { c.ForeColor = Color.FromArgb(rr, gg, bb); }
}
【问题讨论】:
-
你可以做一个 Lambda 表达式,删除循环。但是您需要为每个不同的对象创建一个表达式。您可以将表达式放在一个方法中,然后将每个控件对象传递给该方法。那么这将减少代码重复。
-
您在使用 Winforms 吗?所有对象都是什么类型:
drives1, ipAdd1, spotify1, timeAndDate1,...? -
@MongZhu:另外,他们有共同的父母吗?
-
它们都是 UserControl 的,但由于我将它们添加到 Winforms 的方式,它没有显示在 UserConrol 下
-
在远离控件本身的地方控制这种逻辑似乎很奇怪。问问自己该逻辑是否属于您要放置的地方可能是个好主意。
标签: c# foreach controls parallel-foreach