1

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

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

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

编辑:我正在寻找类似ListBoxItem.IsSelected但它不存在的东西。

4

1 回答 1

3

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

解决方法:

如果你检查是否item包含在SelectedItems你可以马上迭代SelectedItems而不是。另一种选择是SelectedItems在迭代之前复制,如下所示:

List<object> selectedItems = new List<object>();
selectedItems.AddRange( listBoxFiles.SelectedItems.OfType<object>() );
于 2012-07-23T06:11:14.347 回答