B. *_*non 0 c# combobox textbox casting runtime-type
我有一个表单,其中包含以下类型的控件(仅):
Button
ComboBox
Label
TextBox
Run Code Online (Sandbox Code Playgroud)
我有一个"清除"按钮,调用此方法:
private void ClearControls()
{
foreach (TextBox txtbx in this.Controls)
{
if (txtbx != null)
{
txtbx.Text = string.Empty;
}
}
foreach (ComboBox cmbx in this.Controls)
{
if (cmbx != null)
{
cmbx.SelectedIndex = -1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
...但是当我调用它时,应用程序挂起,日志文件显示该方法的"无效转换".怎么会这样?它应该处理TextBoxes和ComboBoxes,并忽略其余的 - 无效的演员阵容在哪里?
那不是那个foreach.
在foreach循环中指定类型不会跳过其他类型的项目; 相反,它会将每个项目转换为该类型.
您可以致电.OfType<T>()获取您要查找的已过滤列表.
foreach将尝试将控件强制转换为指定的类型,这将给出无效的强制转换异常,您应该做的是:
foreach(Control ctrl in this.Controls)
{
if(ctrl as TextBox != null)
{
//Textbox logic
}
if(ctrl as ComboBox!= null)
{
//ComboBox logic
}
}
Run Code Online (Sandbox Code Playgroud)