You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# foreach循环中ListBox仅删除首项一次的实现问题求助

解决C# foreach循环中重复删除ListBox首项的问题

我看你现在的问题很明确:每次找到多个匹配项时,listBox1的首项会被反复删除,而你只需要删除一次对吧?问题根源其实很简单——你把删除listBox1.Items.RemoveAt(0)的代码放在了foreach循环内部,每遍历一个匹配项就执行一次删除,自然匹配几个就删几次了。

修正思路

我们只需要把「删除首项」的操作移到循环外面,确保只有当存在匹配项时,才执行一次删除动作,之后再遍历所有匹配项处理添加逻辑就好。

修改后的代码

// 先判断是否有匹配项
if (matches.Count > 0)
{
    label6.Text = "found!";
    // 只删除一次listBox1的首项
    if (listBox1.Items.Count > 0)
    {
        listBox1.Items.RemoveAt(0);
    }
    timer1.Stop();
    timer2.Start();
    
    // 遍历所有匹配项处理添加等逻辑
    foreach (Match match in matches)
    {
        listBox2.Items.Add(searchemailKOK + "|" + match);
        progressBar1.Increment(1);
        pictureBox3.Height = (200 - (progressBar1.Value / 2));
        label1.Text = listBox1.Items.Count.ToString();
        label2.Text = listBox2.Items.Count.ToString();
    }
}

关键修改点说明

  • 把matches.Count > 0的判断移到循环外面,先处理一次性的删除操作,避免循环内重复执行。
  • 循环内只保留和匹配项相关的业务逻辑(添加到listBox2、更新进度条等),不再包含删除listBox1项的代码。

这样不管你找到5个还是10个匹配项,listBox1的首项只会被删除一次,完全符合你的需求啦。

内容的提问来源于stack exchange,提问作者Replica Team

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 15:12:39