C# 复制 ListBox.SelectedItems 到另一个变量
C# Copy ListBox.SelectedItems to another variable
我遇到了这个错误
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
循环中可能做了什么导致您报告的错误。您不能修改正在枚举的内容。但是,您可以枚举副本并修改原始副本(反之亦然)。
您可以采取多种措施来解决此问题,例如:
foreach (var item in items.ToArray())
{
items.Add(new Item...);
}
或者
for (int i = 0; i < items.Count; i++)
{
items.Add(new Item...);
}
请参阅 What is the best way to modify a list in a 'foreach' loop? 以深入了解为什么会发生这种情况以及在 foreach 循环中修改项目的最佳方法是什么。
我遇到了这个错误
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
循环中可能做了什么导致您报告的错误。您不能修改正在枚举的内容。但是,您可以枚举副本并修改原始副本(反之亦然)。
您可以采取多种措施来解决此问题,例如:
foreach (var item in items.ToArray())
{
items.Add(new Item...);
}
或者
for (int i = 0; i < items.Count; i++)
{
items.Add(new Item...);
}
请参阅 What is the best way to modify a list in a 'foreach' loop? 以深入了解为什么会发生这种情况以及在 foreach 循环中修改项目的最佳方法是什么。