如何确定对象是<type>还是<type> </type> </type>的后代

时间:2010-04-16 03:59:32

标签: c# c#-3.0

我有以下代码:

foreach (var control in this.Controls)
{

}

我想在那里做control.Hide()之类的事情。但this.Controls集合中的项目不属于Control类型(Object)。

我似乎无法记住将其强制转换为隐藏的安全方法,如果它实际上是Control类型而不执行任何操作。 (我是移植的delphi程序员,我一直在想像control is Control。)

6 个答案:

答案 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.IsAssignableFromis没有匹配时所需的情况。 (不幸的是,我现在不记得情况如何。)

答案 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();