为什么我会得到带有此代码的“无效转换”
本文关键字:无效 转换 无效转换 代码 为什么 | 更新日期: 2023-09-27 18:35:34
我有一个包含以下控件类型的表单(仅):
Button
ComboBox
Label
TextBox
我有一个"清除"按钮调用此方法:
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;
}
}
}
。然而,当我调用它时,应用程序挂起,并且日志文件显示该方法的"无效转换"。怎么会这样?它应该处理文本框和组合框,而忽略其余的 - 无效的强制转换可能在哪里?
这不是
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
}
}
基于冈瑟的起点,这是可行的:
foreach (Control ctrl in this.Controls)
{
if (ctrl as TextBox != null)
{
ctrl.Text = string.Empty;
}
if (ctrl as ComboBox != null)
{
((ComboBox)ctrl).SelectedIndex = -1;
}
}