c# - 如何从组合框中删除更多项目?

标签 c# string combobox

我试图从组合框中删除更多项目,但应用程序一次只删除一个项目。

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/

相关文章:

c# - 本地远程过程调用有哪些方法?

C# 共享内存 - CPU 缓存的风险(非 volatile 读取)?

python - 替换 pandas 数据框列中的一些字符串值,其值应为浮点型

c# - 在不同的选项卡中更改组合框的文本

vb.net - 如何为 TableAdapter 参数设置值

c# - ssl wcf 使证书在另一台计算机上可用

c# - Asp.net Gridview - 为什么 DataRowBound 更改在排序时丢失?

java - 打印出用户输入 1 ,2 ,3 , Array,Java,Eclipse

c - C 和 strcpy 中的字符串指针数组

c# - WPF ComboBox 中带有列的不可选择的标题