C#将ListBox.SelectedItems复制到另一个变量
我犯了这个错误 System.InvalidOperationException:'此枚举数绑定到的列表已被修改。仅当列表未更改时,才能使用枚举数。” 因为在我的代码中,所选项目在迭代过程中会发生变化 代码很简单C#将ListBox.SelectedItems复制到另一个变量,c#,windows,visual-studio-2017,C#,Windows,Visual Studio 2017,我犯了这个错误 System.InvalidOperationException:'此枚举数绑定到的列表已被修改。仅当列表未更改时,才能使用枚举数。” 因为在我的代码中,所选项目在迭代过程中会发生变化 代码很简单 var items = testListBox.SelectedItems; foreach (var item in items) { } 我想冻结变量中的items列表,这样如果它发生更改,foreach循环不会更改并创建此错误 问题是行var items=testListBo
var items = testListBox.SelectedItems;
foreach (var item in items)
{
}
我想冻结变量中的items列表,这样如果它发生更改,foreach
循环不会更改并创建此错误
问题是行var items=testListBox.SelectedItems代码>似乎不起作用,因为出于某种原因,它仍然会给我这个错误
如何将SelectedItems列表克隆到另一个变量,以便在SelectedItems列表更改时不会在foreach循环中崩溃
谢谢,您的代码创建了一个名为items
的别名,该别名指的是SelectedItems
。它不能复制
似乎一个简单的解决办法是:
var items = testListBox.SelectedItems.ToList();
唉,WinForms集合太旧了,它们不支持IEnumerable
,因此Linq也不完全支持它们。相反,首先将所选项目强制转换为对象
(或任何其他适当类型):
var items=testListBox.SelectedItems.OfType().ToList();
不清楚您在foreach
循环中执行的操作可能会导致您报告的错误。无法修改正在枚举的内容。但是,您可以枚举副本并修改原始副本(反之亦然)。您可以采取各种措施来解决此问题,例如:
foreach (var item in items.ToArray())
{
items.Add(new Item...);
}
或
for(int i=0;i
有关为什么会发生这种情况以及修改foreach循环中的项的最佳方法,请参阅,以获得深入的答案
foreach (var item in items.ToArray())
{
items.Add(new Item...);
}
for (int i = 0; i < items.Count; i++)
{
items.Add(new Item...);
}