當枚舉一個.NET集合,MSDN states是:枚舉集合,然後修改它,引發異常的先例是什麼?
的枚舉仍然有效,只要集合保持不變。如果對集合進行更改(如添加,修改或刪除元素),則枚舉器將無法恢復無效,並且其行爲未定義。
「無法恢復無效」是什麼意思?
以一個二叉樹爲例,引用都是向左和向右的子元素,也是父元素。在這樣的樹中,對樹中單個節點的單引用足以在樹中導航,因爲您可以輕鬆地從中找到樹中的下一個節點。因此,對於那棵樹,假設我刪除了一些其他節點(假設我沒有移除我當前正在坐的節點),我是否應該仍然使枚舉器無效?請注意,我不是在說這裏的多線程操作,只是一個運行循環的線程,並修改了循環體內的集合。
難道這個「法律」真的是一個法則嗎,即使普查員可能繼續,它應該不會?
+1。我認爲,以一致的方式拋出異常的安全性遠遠超過了能夠繼續枚舉已被修改的集合的潛在好處,這種集合的調整方式不會影響統計員,而取決於其位置。 – 2010-01-04 18:42:40
這就是我的想法 - 一致性(特別是框架)的價值比在邊緣情況下能夠做到這一點的邊際價值更高。 – 2010-01-04 18:51:26