1. 程式人生 > >【專案總結】ForEach時出錯報"集合已修改;可能無法執行列舉操作"

【專案總結】ForEach時出錯報"集合已修改;可能無法執行列舉操作"

背景

這裡寫圖片描述
選中全選時,把ListView對應的項選中

程式碼

m_PickServer.ForEach(delegate(string n)
{
    foreach (ListViewItem listItem in lstServerName.Items)
    {
        if (n == listItem.Text) listItem.Selected = true;
    }
});

報錯:集合已修改;可能無法執行列舉操作
個人猜測:元素為值型別的集合,遍歷時修改了值
查詢引申:

1、想起以前有人問我 str.replace(“a”,”b”); 為何不成功?
2、dt.AddDays(1)為啥還是今天?

解決

原因
中間變數是m_PickServer,當全選時遍歷m_PickServer,將ListItem設為選中狀態。然後我遍歷m_PickServer時,設定ListItem為選中,忘記了,選中時觸發一個事件,將m_PickServer更新。

引申的解決

兩個函式都不修改原來的資料,是返回一個新的資料。