移除多个选中索引时出错:如何同步删除Password List与MD5 List对应项
多选项同步删除报错解决方案
报错核心原因
你当前使用的升序遍历索引删除逻辑存在索引偏移问题:默认获取的选中索引集合为从小到大升序排列,每删除一个位置靠前的索引后,列表中所有位于该索引之后的元素索引都会自动减1,后续要删除的原始索引会直接失效,要么删错对应项,要么触发索引越界报错。
修复方案
将选中的索引集合先做降序排序,按从大到小的顺序遍历删除即可。先删除位置靠后的大索引,不会影响小索引的对应位置,完全避免索引偏移问题。
以下是常见WinForm/WPF场景下的代码示例:
// 1. 先把选中索引转为可操作的列表 var delIndices = passwordListBox.SelectedIndices.Cast<int>().ToList(); // 2. 对索引按从大到小降序排序 delIndices.Sort((x, y) => y.CompareTo(x)); // 3. 遍历排序后的索引同步删除两个列表的对应项 foreach (int idx in delIndices) { passwordListBox.Items.RemoveAt(idx); md5ListBox.Items.RemoveAt(idx); }
额外注意事项
- 日常添加项时必须保证两个ListBox的项数完全一致,避免出现数量差导致的索引不匹配
- 如果项目用了数据源绑定,更建议直接操作共享数据源,两个ListBox分别绑定数据源的密码、MD5字段,删除时直接操作数据源,不用手动维护两个列表的索引同步。
内容的提问来源于stack exchange,提问作者Jordan Maxwell
相关产品推荐
相关产品推荐

