2011-05-05 79 views
0

我正在通過字典進行枚舉並創建要添加到ListView的項目。但是,一行特別是造成此錯誤:收藏已修改;枚舉操作可能不會執行

集合被修改;枚舉操作可能不會執行。

foreach (KeyValuePair<string, bool> s in test.Value.Properties) 
{ 
    ListViewItem item = new ListViewItem(); 
    item.Text = String.Format("{0}", s.Key); 
    if (s.Value) { item.Checked = true; } // the problem line 
    listView2.Items.Add(item); 
} 

我認爲之所以設置item.Text工作是因爲,它是創造一個新的字符串我沒有修改原始值。如果我改變item.Checked = true創建一個新的布爾值,它工作正常,但布爾值總是默認爲false,這不是我想要的。

我該如何解決這個問題?

此外,我是否應該試圖修改任何集合的數據在foreach中?我原本以爲這個問題是因爲我修改了我正在循環的集合的數據,但這似乎是ListViewItemCollection的一個問題,我沒有循環。

回答

7

如果您修改了您正在枚舉的集合,則只會引發此錯誤。
我在代碼中看不到任何東西,所以一定有其他問題。
我只能猜測,但也許你修改test.Value.Properties在你添加一個新項目到listView2時引發的事件?

+1

這是我寫的答案。 OP沒有對s進行任何修改或測試.Value.Properties是這類異常的常見罪魁禍首。 – KeithS 2011-05-05 16:03:30

+0

啊,就是這樣。我在listView2上有一個ItemCheck方法,它修改了我正在循環的集合。還沒有找到解決辦法,但至少我找到了罪魁禍首。謝謝! – 2011-05-05 16:17:01

相關問題