如果在ListBox中没有选择任何项目,则代码可以正常工作。
如果在ListBox中选择了至少一个项目,则在评估第一个项目后,foreach迭代会中断。例外是InvalidOperationException,详细信息显示Items集合已被修改。
foreach (object item in listBoxFiles.Items) //InvalidOperationException occurs
{
if (listBoxFiles.SelectedItems.Contains(item))
{
//do nothing
}
}
编辑:我正在寻找类似 ListBoxItem.IsSelected 的内容,但它不存在。
答案 0 :(得分:2)
我可以重现这个问题。对SelectedItems
的访问似乎正在改变Items
,而不是对Contains
的调用。它不应该这样做。我现在没有解释。
解决方法:
如果您检查item
中是否包含SelectedItems
,您可以立即迭代SelectedItems
。另一种选择是在迭代之前复制SelectedItems
,如下所示:
List<object> selectedItems = new List<object>();
selectedItems.AddRange( listBoxFiles.SelectedItems.OfType<object>() );