C#Foreach是否更改某些对象属性?

C#Foreach是否更改某些对象属性?,c#,object,properties,foreach,controls,C#,Object,Properties,Foreach,Controls,我有一个带有复选框和标签的面板,我想在单击按钮时更改复选框的所有选中状态 foreach (object x in panel1.Controls) { if (x.GetType() == typeof(CheckBox)) { x.Checked = false; // problem is here; // (CheckBox)x.Checked = false;

我有一个带有复选框和标签的面板,我想在单击按钮时更改复选框的所有选中状态

foreach (object x in panel1.Controls)
        {
            if (x.GetType() == typeof(CheckBox))
            {
                x.Checked = false; // problem is here;
                // (CheckBox)x.Checked = false; // also didn't work
            }
        }

我确信这是一件简单的事情,但找不到解决问题的方法。我可以在vb.net中编写相同的过程,但不想使用该过程

您需要在整个铸造操作周围加上括号:

((CheckBox)x).Checked = false;

x仍然是一个对象,因此需要将该对象强制转换为复选框

((Checkbox)x).Checked = false;
试一试

正如您编写的那样,编译器理解

(CheckBox)(x.Checked) = false;

您完全可以稍微整理一下代码(以及用括号解决问题):

foreach(panel1.Controls.OfType()中的复选框)
{
box.Checked=true;
}
(CheckBox)(x.Checked) = false;
foreach(var x in panel1.Controls)
{
    var checkbox = x as Checkbox;
    if(checkbox != null) checkbox.Checked = false;
}
foreach(Checkbox box in panel1.Controls.OfType<CheckBox>())
{
  box.Checked = true;
}