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)
使用OfType<T>()方法:
foreach (RadioButton item in yourChildern.OfType<RadioButton>())
{
//your code
}
Run Code Online (Sandbox Code Playgroud)