foreach c#给出无法施放错误

Oli*_*ver 2 c# foreach winforms

我有一个用C#编写的程序,带有一个清除按钮,需要清除整个表单的内容.对于我在foreach上用于radiobuttons的按钮和一个用于复选框的按钮.

foreach (RadioButton rad in quiztabs.TabPages)
{
    rad.Checked = false;
}
foreach (CheckBox chk in quiztabs.TabPages)
{
    chk.Checked = false;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我点击清除按钮时,我得到一个Unable to cast object of type System.Windows.Forms.TabPage to type System.Windows.Forms.RadioButton.

Hei*_*nzi 18

你误会的行为foreach:它不会过滤中的所有元素TabPages,它会尝试施放所有的人.

如果要过滤,可以使用LINQ显式地进行过滤:

    foreach (RadioButton rad in quiztabs.TabPages.OfType<RadioButton>())
    {
        rad.Checked = false;
    }
    foreach (CheckBox chk in quiztabs.TabPages.OfType<CheckBox>())
    {
        chk.Checked = false;
    }
Run Code Online (Sandbox Code Playgroud)

但是,这仍然无法解决您的问题,因为TabPages集合仅包含TabPage元素.你可能想要的是这样的:

foreach (TabPage page in quiztabs.TabPages) 
{
    foreach (RadioButton rad in page.Controls.OfType<RadioButton>())
    {
        rad.Checked = false;
    }
    foreach (CheckBox chk in page.Controls.OfType<CheckBox>())
    {
        chk.Checked = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个糟糕的问题,你只是不明白并来到了正确的地方学习.+1 BTW @Heinzi,对这个问题的最清楚的解释. (2认同)

Hos*_*Rad 5

使用OfType<T>()方法:

foreach (RadioButton item in yourChildern.OfType<RadioButton>())
{
    //your code
}
Run Code Online (Sandbox Code Playgroud)