[英]C# Copy ListBox.SelectedItems to another variable
我收到了這個錯誤
System.InvalidOperationException:'已修改此枚舉器綁定的列表。 只有在列表不變的情況下才能使用枚舉器。
因為在我的代碼中,所選項目在迭代期間發生了變化
代碼很簡單
var items = testListBox.SelectedItems;
foreach (var item in items)
{
}
我想凍結變量中的項列表,這樣如果它發生變化, foreach
循環就不會改變並產生這個錯誤
問題是line 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...);
}
請參閱在“foreach”循環中修改列表的最佳方法是什么? 深入解答為什么會發生這種情況以及修改foreach循環中項目的最佳方法是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.