迭代List Box.Items时出现异常

时间:2012-07-23 05:58:00

标签: c# winforms listbox iteration

如果在ListBox中没有选择任何项目,则代码可以正常工作。

如果在ListBox中选择了至少一个项目,则在评估第一个项目后,foreach迭代会中断。例外是InvalidOperationException,详细信息显示Items集合已被修改。

foreach (object item in listBoxFiles.Items) //InvalidOperationException occurs
{
    if (listBoxFiles.SelectedItems.Contains(item)) 
    {
        //do nothing
    }
}

编辑:我正在寻找类似 ListBoxItem.IsSelected 的内容,但它不存在。

1 个答案:

答案 0 :(得分:2)

我可以重现这个问题。对SelectedItems的访问似乎正在改变Items,而不是对Contains的调用。它不应该这样做。我现在没有解释。

解决方法:

如果您检查item中是否包含SelectedItems,您可以立即迭代SelectedItems。另一种选择是在迭代之前复制SelectedItems,如下所示:

List<object> selectedItems = new List<object>();
selectedItems.AddRange( listBoxFiles.SelectedItems.OfType<object>() );