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

ListBox奇偶数值删除功能异常:误删列表奇偶位置项

解决ListBox删除奇偶数值而非奇偶位置项的问题

你的代码存在两个核心问题,导致功能不符合预期:

  1. 正向循环删除引发索引错位:从前往后遍历ListBox时,删除元素会让后续元素自动前移,导致下一个待检查的元素被跳过,最终变成删除了奇偶位置的项,而非数值本身。
  2. 删除奇数按钮的语法错误:Int32.Parse(listBox1.Items[i] % 2 == 1) 写法完全错误,需先将列表项解析为整数,再进行取模判断,而非直接对列表项取模后解析。

修正后的删除偶数代码

private void button3_Click(object sender, EventArgs e)//Remove Even Numbers
{
    // 从后往前遍历,避免删除元素导致索引错位
    for (int i = listBox1.Items.Count - 1; i >= 0; i--)
    {
        int num = int.Parse(listBox1.Items[i].ToString());
        if (num % 2 == 0)
        {
            listBox1.Items.RemoveAt(i); // 按索引删除更高效
        }
    }              
}

修正后的删除奇数代码

private void button4_Click(object sender, EventArgs e)//Remove Odd Numbers
{
    // 从后往前遍历,确保每一项都被检查
    for (int i = listBox1.Items.Count - 1; i >= 0; i--)
    {
        int num = int.Parse(listBox1.Items[i].ToString());
        if (num % 2 != 0) // 用!=0判断奇数更严谨,兼容负数场景
        {
            listBox1.Items.RemoveAt(i);
        }
    }
}

补充说明:

  • 用RemoveAt(i)替代Remove(listBox1.Items[i]):直接按索引删除比查找元素删除效率更高,也能避免重复项导致的误删。
  • 奇数判断用num%2!=0:如果列表中有负数(如-3),-3%2结果为-1,用!=0能正确识别所有奇数,兼容性更好。
  • 反向遍历逻辑:删除当前索引元素后,前面的元素位置不受影响,不会出现跳过元素的情况,能完整检查每一项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:16