我试图从组合框中删除更多项目,但应用程序一次只删除一个项目。
combobox
有一个电子邮件地址列表。我想删除空项目 ("")
,以及文本中没有 @
的项目。
下面的代码一次只删除一个项目。
for (int i = 0; i < cmbTo.Items.Count; i++)
{
string st = cmbTo.Items[i].ToString();
if (st == "" || st.IndexOf("@") == -1)
{
cmbTo.Items.RemoveAt(i);
}
}
我该如何重写它?
最佳答案
提示:想想当你删除一个项目时 i
变量会发生什么
...
当您 RemoveAt 一个项目时,该项目将被删除,并且每个后续项目都会向上移动一个索引。然后你的循环到达底部,然后回到顶部,递增 i
,然后继续。
结果?你刚刚跳过了一个项目。如果这是列表中的最后一项,则循环存在。
相反,手动递减 i
以抵消您的删除,以便一切正常:
for (int i = 0; i < cmbTo.Items.Count; i++)
{
string st = cmbTo.Items[i].ToString();
if (st == "" || st.IndexOf("@") == -1)
{
cmbTo.Items.RemoveAt(i);
i--;
}
}
关于c# - 如何从组合框中删除更多项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487128/