簡體   English   中英

C#將ListBox.SelectedItems復制到另一個變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM