我遇到了这个错误
System.InvalidOperationException: 'List that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change.'
因为在我的代码中,Selected Items 在迭代过程中会发生变化
代码简单
var items = testListBox.SelectedItems;
foreach (var item in items)
{
}
我想将项目列表卡住在一个变量中,这样如果它发生变化,foreach
循环不会发生变化并产生此错误
问题是行 var items = testListBox.SelectedItems;
似乎不起作用,因为出于某种原因它仍然给我这个错误
如何将 SelectedItems 列表克隆到另一个变量,以便在 SelectedItems 列表更改时它不会在 foreach 循环中崩溃
谢谢,
最佳答案
您的代码创建了一个名为 items
的别名指的是SelectedItems
.它不会复制。
似乎一个简单的解决方法是:
var items = testListBox.SelectedItems.ToList();
唉,WinForms 集合太旧了,它们不支持 IEnumerable<T>
所以 Linq 不完全支持。相反,首先将所选项目转换到 object
(或任何其他适当的类型):
var items = testListBox.SelectedItems.OfType<object>().ToList();
不清楚您在 foreach
中可能在做什么循环导致您报告的错误。您不能修改正在枚举的内容。但是,您可以枚举副本并修改原始副本(反之亦然)。
关于C# 将 ListBox.SelectedItems 复制到另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812659/