.NET コレクションを列挙するとき、MSDN は次のように述べています。
コレクションが変更されない限り、列挙子は有効なままです。要素の追加、変更、または削除などの変更がコレクションに加えられた場合、列挙子は回復できないほど無効になり、その動作は未定義になります。
「回復不能な無効化」とは正確にはどういう意味ですか?
たとえば、左右の子への参照と親への参照の両方を持つ二分木を考えてみましょう。このようなツリーでは、ツリー内の次のノードを簡単に見つけることができるため、ツリー内をナビゲートするには、ツリー内の 1 つのノードへの 1 つの参照で十分です。
そのツリーで、他のノードを削除するとします (おそらく、現在座っているノードは削除しません)。それでも、列挙子を無効にする必要がありますか? ここではマルチスレッド操作について話しているのではなく、単一のスレッドがループを実行し、ループ本体内のコレクションを変更していることに注意してください。
この「法則」は本当に、列挙子が続行できたとしても続行すべきではないという法則ですか?