我有以下代码:
foreach (var control in this.Controls)
{
}
我想在那里做control.Hide()
之类的事情。但this.Controls
集合中的项目不属于Control
类型(Object
)。
我似乎无法记住将其强制转换为隐藏的安全方法,如果它实际上是Control
类型而不执行任何操作。 (我是移植的delphi程序员,我一直在想像control is Control
。)
答案 0 :(得分:5)
以下是您不想使用var。
的情况foreach (Control control in this.Controls)
{
control.Hide();
}
完全符合您的要求。
如果你不相信,请测试它。
对于可能具有混合集合的其他场景,您可以执行类似
的操作foreach (var foo in listOfObjects.OfType<Foo>())
{
}
答案 1 :(得分:1)
就是这样。
foreach (var control in this.Controls)
{
if(control is Control)
{
((Control)control).Hide();
}
}
答案 2 :(得分:1)
Control c = control as Control;
if (c != null)
c.Hide();
或
if (control is Control)
((Control)control).Hide();
答案 3 :(得分:1)
或作为替代方案,您也可以
foreach(var control in this.Controls.OfType<Control>())
{
control.Hide();
}
答案 4 :(得分:1)
所有其他答案(确认你的预感)可能是正确的。
我遇到Type.IsAssignableFrom
与is
没有匹配时所需的情况。 (不幸的是,我现在不记得情况如何。)
答案 5 :(得分:0)
有几种方法可以做到这一点:
if (control is Control)
((Control)control).Hide();
或
if (control is Control)
(control as Control).Hide();
或者如果您只想迭代控件,
foreach(var control in this.Controls.Cast<Control>())
control.Hide();