在ListBox.Items中交互时发生异常



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

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

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

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

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

解决方法:

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

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

相关内容

最新更新