2011年10月17日 星期一

[C#]集合已修改; 列舉作業可能尚未執行

使用 dictionary 會有的一個使用狀況是,
把dictionary 裡的所有值都處理過一遍,像是
foreach( string k in dict.Keys)
{
  dict[k] = dict[k] + “abcd”;
}

這時候會出現「集合已修改; 列舉作業可能尚未執行」的錯誤。
我非常想不懂,這樣,dictionary 就超難用的!
還好有人也遇到。
http://godleon.blogspot.com/2011/06/linq.html
裡面提到的解決方法,把 foreach 的集合,先變成不會變化的 array。
免得 runtime 覺得有危險。
foreach ( string k in dict.Keys.ToArray() )
或者使用
System.Collections.Concurrent namespace 中的 thread safe 集合物件
搞這樣,還滿麻煩的…說真的。

我習慣把資料放在 dictionary 裡傳遞。
因為我用 python 習慣了。
尤其 javascript 的物件,事實上跟 dictionary 沒兩樣…。
這在小程式的時候很好用,如果是超大團隊的話,還是建專用物件來傳會好一點。
這又是題外話了…

沒有留言:

張貼留言